首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在崇高文本3段中应用2 regex操作

在崇高文本3段中应用2 regex操作
EN

Stack Overflow用户
提问于 2019-11-04 12:03:49
回答 1查看 78关注 0票数 1

我试图为崇高文本3制作一个片段,我希望将文件名变量(TM_FILENAME)转换为大写,并将".c“替换为"_H”。我有表情去做,但不是同时做。

我试过把它们放在一起,但没有用。

我拥有的片段文件的内容:

代码语言:javascript
复制
#ifndef ${1:${TM_FILENAME/\..+$/_H/}}
# define ${1:${TM_FILENAME}}
${1/(.*)/\U$1/\E}
$0

#endif

当文件名是test.c时,结果是:

代码语言:javascript
复制
#ifndef test_H
# define test_H
TEST_H


#endif

第三行是我想要的,但我想在ifndef之后进行定义。

所以我需要把第三行的正则表达式和第一行的正则表达式结合起来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-04 21:58:20

正如@keith在关于您的问题的评论中所提到的,这是可能的,方法是利用Sublime使用boost正则表达式进行匹配,使用boost格式字符串来创建替换文本。

它所公开的特性之一是替换文本中的条件表达式的概念:

角色“?”开始一个条件表达式,一般形式是: ?Ntrue-expression:false-expression 其中N是十进制数字。 如果匹配子表达式N,则计算真表达式并发送到输出,否则计算假表达式并将其发送到输出。

这意味着,对于正则表达式中包含的每个捕获组,您可以指定哪些内容应该替换为两个单独的文本项;当组捕获一些文本时,可以指定替换文本;如果没有,可以指定替换文本。

基于你上述问题的一个例子是:

${1:${TM_FILENAME/(\.c)|(.)/(?1_H:)(?2\u$2:)/g}}

这里的regex部分是(\.c)|(.),它要么匹配文字文本.c (组1),要么交替匹配任何单个字符(组2)。

在替换文本中,(?1_H:)表示,如果第一个捕获组捕获了任何文本,则替换文本应该是文字文本_H;否则替换文本应该是空字符串。

在此之后,(?2\u$2:)说,如果捕获组2捕获了任何内容,替换文本应该是字符的大写版本;否则替换应该是空字符串。

由于输入regex具有替换(|字符),因此regex匹配其中一个或另一个;因此在替换文本中只有一个组或另一个组中有任何文本,并且输出也相应地起作用。

regex中的选项指定g,以确保正则表达式应用于所有内容;否则,它将只匹配一次,在本例中,这将产生文件名中的第一个字符大写后停止的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58693107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档