regex 在Sublime Text 2中搜索正则表达式

6uxekuva  于 2023-02-05  发布在  其他
关注(0)|答案(7)|浏览(203)

我想在Sublime Text 2中用正则表达式进行搜索替换。关于这个的文档相当缺乏。具体来说,我想在组上进行替换,所以类似于转换以下文本:
Hello my name is bob
这个搜索词:
查找内容:my name is (\w)+
替换为:my name used to be $(1)
搜索项工作正常,但我想不出使用regexp组实际执行替换的方法。

ubof19bj

ubof19bj1#

通常反向引用是$1\1(反斜杠1),用于第一个捕获组(括号中的模式的第一个匹配),而Sublime确实支持这两种语法。

my name used to be \1

my name used to be $1

还请注意,您的原始捕获模式:

my name is (\w)+

不正确,将只捕获名称的最后一个字母,而不是整个名称。应使用以下模式捕获名称的所有字母:

my name is (\w+)
bbmckpt7

bbmckpt72#

顺便说一下,在上面的问题:
适用于:

Hello, my name is bob

查找部件:

my name is (\w)+

更换部件:

my name used to be \1

会再回来:

Hello, my name used to be b

将查找部件更改为:

my name is (\w+)

和replace将是你所期望的:

Hello, my name used to be bob

虽然(\w)+将匹配"bob",但它不是要替换的分组。

7bsow1i6

7bsow1i63#

重要:在搜索字符串中使用( )括号
虽然前面的答案是正确的,但有一点需要强调!所有要在替换字符串中使用的搜索字符串中的匹配段必须( )括号括起来,否则这些匹配段将无法被定义的变量访问,如$1$2\1\2等。
例如,我们想用'px'替换'em',但保留数字值:

margin: 10em;  /* Expected: margin: 10px */
    margin: 2em;   /* Expected: margin: 2px */
  • 替换字符串:margin: $1pxmargin: \1px
  • 检索字符串(正确):margin: ([0-9]*)em//带括号
  • 搜索字符串(不正确):margin: [0-9]*em
    • 正确案例示例:**使用margin: ([0-9]*)em搜索字符串(带括号)。用( )括号将所需的匹配段(例如$1\1)括起来,如下所示:
  • 查找:margin: ([0-9]*)em(带括号)
  • 替换为:margin: $1pxmargin: \1px
  • 结果:
margin: 10px;
    margin: 2px;
    • 不正确的案例示例:**使用margin: [0-9]*em搜索字符串(不带括号)。以下正则表达式模式将匹配所需的行,但匹配的段在替换的字符串中将不可用,如$1\1
  • 查找:margin: [0-9]*em(不带括号)
  • 替换为:margin: $1pxmargin: \1px
  • 结果:
margin: px; /* `$1` is undefined */
    margin: px; /* `$1` is undefined */
3pvhb19x

3pvhb19x4#

以下是已批准答案的可视化演示。

yrefmtwq

yrefmtwq5#

请注意,如果使用9个以上的捕获组,则必须使用语法${10}
$10\10\{10}无法工作。

gjmwrych

gjmwrych6#

看一下Sublime Text Unofficial Documentation's article on Search and Replace,看起来+(.+)是您可能需要的捕获组...但我个人使用了(.*),它运行得很好。要替换您所说的方式,您可能会喜欢这个conversation in the forums,特别是this post,它说只需使用$1来使用第一个捕获的组。

因为画面胜于文字
之前:

**之后:**一周一天

vdzxcuhz

vdzxcuhz7#

我也有类似的问题:
许多条纹与此模式一样,在唐乔s6去(正确的是唐乔去)
我用这个工具:https://coding.tools/regex-replace
正则表达式:([a-z])6
替换为:$1é
单击“Regex替换”按钮。结果:
唐乔去了
它也适用于Google Sheets。

相关问题