我想在Sublime Text 2中用正则表达式进行搜索替换。关于这个的文档相当缺乏。具体来说,我想在组上进行替换,所以类似于转换以下文本:Hello my name is bob这个搜索词:查找内容:my name is (\w)+替换为:my name used to be $(1)搜索项工作正常,但我想不出使用regexp组实际执行替换的方法。
Hello my name is bob
my name is (\w)+
my name used to be $(1)
ubof19bj1#
通常反向引用是$1或\1(反斜杠1),用于第一个捕获组(括号中的模式的第一个匹配),而Sublime确实支持这两种语法。
$1
\1
my name used to be \1
或
my name used to be $1
还请注意,您的原始捕获模式:
不正确,将只捕获名称的最后一个字母,而不是整个名称。应使用以下模式捕获名称的所有字母:
my name is (\w+)
bbmckpt72#
顺便说一下,在上面的问题:适用于:
Hello, my name is bob
查找部件:
更换部件:
会再回来:
Hello, my name used to be b
将查找部件更改为:
和replace将是你所期望的:
Hello, my name used to be bob
虽然(\w)+将匹配"bob",但它不是要替换的分组。
7bsow1i63#
重要:在搜索字符串中使用( )括号虽然前面的答案是正确的,但有一点需要强调!所有要在替换字符串中使用的搜索字符串中的匹配段必须用( )括号括起来,否则这些匹配段将无法被定义的变量访问,如$1、$2或\1、\2等。例如,我们想用'px'替换'em',但保留数字值:
( )
$2
\2
margin: 10em; /* Expected: margin: 10px */ margin: 2em; /* Expected: margin: 2px */
margin: $1px
margin: \1px
margin: ([0-9]*)em
margin: [0-9]*em
margin: 10px; margin: 2px;
margin: px; /* `$1` is undefined */ margin: px; /* `$1` is undefined */
3pvhb19x4#
以下是已批准答案的可视化演示。
yrefmtwq5#
请注意,如果使用9个以上的捕获组,则必须使用语法${10}。$10、\10或\{10}将无法工作。
${10}
$10
\10
\{10}
gjmwrych6#
看一下Sublime Text Unofficial Documentation's article on Search and Replace,看起来+(.+)是您可能需要的捕获组...但我个人使用了(.*),它运行得很好。要替换您所说的方式,您可能会喜欢这个conversation in the forums,特别是this post,它说只需使用$1来使用第一个捕获的组。
+(.+)
(.*)
因为画面胜于文字之前:
**之后:**一周一天
vdzxcuhz7#
我也有类似的问题:许多条纹与此模式一样,在唐乔s6去(正确的是唐乔sé去)我用这个工具:https://coding.tools/regex-replace正则表达式:([a-z])6替换为:$1é单击“Regex替换”按钮。结果:唐乔sé去了它也适用于Google Sheets。
s6
sé
([a-z])6
$1é
7条答案
按热度按时间ubof19bj1#
通常反向引用是
$1
或\1
(反斜杠1),用于第一个捕获组(括号中的模式的第一个匹配),而Sublime确实支持这两种语法。或
还请注意,您的原始捕获模式:
不正确,将只捕获名称的最后一个字母,而不是整个名称。应使用以下模式捕获名称的所有字母:
bbmckpt72#
顺便说一下,在上面的问题:
适用于:
查找部件:
更换部件:
会再回来:
将查找部件更改为:
和replace将是你所期望的:
虽然(\w)+将匹配"bob",但它不是要替换的分组。
7bsow1i63#
重要:在搜索字符串中使用
( )
括号虽然前面的答案是正确的,但有一点需要强调!所有要在替换字符串中使用的搜索字符串中的匹配段必须用
( )
括号括起来,否则这些匹配段将无法被定义的变量访问,如$1
、$2
或\1
、\2
等。例如,我们想用'px'替换'em',但保留数字值:
margin: $1px
或margin: \1px
margin: ([0-9]*)em
//带括号margin: [0-9]*em
margin: ([0-9]*)em
搜索字符串(带括号)。用( )
括号将所需的匹配段(例如$1
或\1
)括起来,如下所示:margin: ([0-9]*)em
(带括号)margin: $1px
或margin: \1px
margin: [0-9]*em
搜索字符串(不带括号)。以下正则表达式模式将匹配所需的行,但匹配的段在替换的字符串中将不可用,如$1
或\1
:margin: [0-9]*em
(不带括号)margin: $1px
或margin: \1px
3pvhb19x4#
以下是已批准答案的可视化演示。
yrefmtwq5#
请注意,如果使用9个以上的捕获组,则必须使用语法
${10}
。$10
、\10
或\{10}
将无法工作。gjmwrych6#
看一下Sublime Text Unofficial Documentation's article on Search and Replace,看起来
+(.+)
是您可能需要的捕获组...但我个人使用了(.*)
,它运行得很好。要替换您所说的方式,您可能会喜欢这个conversation in the forums,特别是this post,它说只需使用$1
来使用第一个捕获的组。因为画面胜于文字
之前:
**之后:**一周一天
vdzxcuhz7#
我也有类似的问题:
许多条纹与此模式一样,在唐乔
s6
去(正确的是唐乔sé
去)我用这个工具:https://coding.tools/regex-replace
正则表达式:
([a-z])6
替换为:
$1é
单击“Regex替换”按钮。结果:
唐乔
sé
去了它也适用于Google Sheets。