繁体   English   中英

Sublime Text 2 中的正则表达式搜索替换

[英]Regular expression search replace in Sublime Text 2

我希望在 Sublime Text 2 中用正则表达式进行搜索替换。这方面的文档相当贫乏。 具体来说,我想对组进行替换,例如转换此文本:

Hello my name is bob

这个搜索词:

查找内容: my name is (\w)+

替换为: my name used to be $(1)

搜索词工作得很好,但我想不出一种方法来实际使用正则表达式组进行替换。

对于第一个捕获组(括号中模式的第一个匹配项),反向引用通常是$1\1 (反斜杠),实际上 Sublime 支持这两种语法。 所以尝试:

my name used to be \1

要么

my name used to be $1

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

my name is (\w)+

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

my name is (\w+)

顺便说一句,在上面的问题中:

为了:

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+)

替换将是你所期望的:

Hello, my name used to be bob

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

重要提示:在搜索字符串中使用( )括号

虽然前面的答案是正确的,但有一点需要强调! 您要在替换字符串中使用的搜索字符串中的所有匹配段都必须( )圆括号括起来,否则这些匹配段将无法访问已定义的变量,例如$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 */

这是已批准答案的直观呈现。

在此处输入图像描述

请注意,如果您使用超过 9 个捕获组,则必须使用语法${10}

$10\10\{10}不起作用

查看Sublime Text 非官方文档关于搜索和替换的文章,看起来+(.+)是您可能想要的捕获组......但我个人使用(.*)并且效果很好。 要按照您所说的方式替换,您可能会喜欢论坛中的这个对话,特别是这篇文章,它说只需使用$1即可使用第一个捕获的组。

而且由于图片胜于文字...

前: 在查找/替换之前

后: 查找/替换后

我有类似的问题:

许多像 Don Jo s6那样具有这种模式的 strigs 去了(正确的是 Don Jo 去了)

我使用了这个工具: https://coding.tools/regex-replace

正则表达式: ([az])6

替换为: $1é

单击“正则表达式替换”按钮。 结果:

去了

它也适用于 Google 表格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM