如何在文本编辑器中替换正则表达式的子字符串

How to replace a substring of a regular expression in text editor

这是我的示例字符串:

(20,'7,8,9|1|X',1,1,1,1,1),
(81,'3',1,1,1,1,10),          
(83,'3',1,1,1,1,15),

我的任务是仅在以“(20,”

开头的行将“|X'”替换为“|X|X|X”

使用 www.rubular.com 我已经得到了 reg ex。 : ^(20,'.*)X' 匹配此字符串:(20,'7,8,9|1|X' 这意味着,替换命令将替换与我的 reg.Ex.

匹配的整个字符串

我不知道如何 select 只替换那个子字符串“|X'”。

我最好使用 Notepad++,如果它能够替换 reg-ex 子字符串的话。

在 "Find" 下的 Notepad++ Find/Replace window 中键入以下内容:

^(\(20,.*)(\|X)(.*\),)$

上面的正则表达式中有三个 capturing 组。第一组 (\(20,.*) 匹配 [=13= 之前的所有内容,第二组 (\|X) 是您要查找的内容,第三组 (.*\),) 是 [= 之后的所有内容13=]。比赛本身可作为变量 </code>、<code></code>,从左到右对应第一、第二和第三组比赛。</p> <p>在 "Replace" 框中键入以下内容:</p> <pre><code>\|X\|X\|X

这有效地仅替换了您想要的内容,同时保留了该行的其余部分。

这是一个link,您可以在其中测试正则表达式:

Regex101

here is a link 到讨论 find/replace 在 Notepad++ 中的规范 Stack Overflow 文章。

正则表达式使用组来捕获子字符串,通常,editors/programmation 语言使用语法 $n 来使用这些组。这意味着您可以使用它并替换为:|X|X|X

re.sub(r"^(\(20,.*?)\|X(\'.*)$", r"|X|X|X", "(20,'7,8,9|1|X',1,1,1,1,1)")

您可以使用以下正则表达式替换:

^(\(20,.*?\d)\|X'

并替换为|X|X|X'

如果已经有 |X 被替换,这将不会替换它们。

正则表达式细分:

  • ^ - 行首
  • (\(20,.*?\d) - 一群....
    • \(20, - 文字 (20,
    • .*? - 除换行符外的 0 个或多个字符(尽可能少,*? 是惰性量词)
    • \d - 一个数字
  • \|X' - 文字 |X'

这是带有 Notepad++ 设置的屏幕:

在替换字符串中,我们使用 back-references$&</code> 等(不是变量)和 <code>(...) 被称为 capturing group(不是匹配,match 是整个表达式匹配的整个文本)。可以在 regular-expressions.info.

找到更多详细信息