首页 > 解决方案 > 正则表达式 - 不匹配全文/替换其他部分

问题描述

我有一个类似于以下内容的测验:

1: How old am I?
A: 8 days
B: 75
C: 100
D: 99correct
xxxxxxxxxxxx
2: What is your favorite color?
A: blue
B: greencorrect
C: red
D: blue
xxxxxxxxxxxx

在每种情况下,正确答案都通过在正确答案末尾使用单词正确来标记。

我想要做的是把那个正确的答案加到xxxxxxxxxxxx之后,这样它就变成了:

xxxxxxxxxxxx B: Green.

我目前在 Textpad 中使用以下正则表达式以找到正确的答案

FIND:     ([A-D]:(?s).*correct(?s).*xxxxxxxxxxxx)
REPLACE:  \1xxxxxxxxxxxx

不幸的是,它不起作用,因为它正在用整个测验替换整个测验,然后添加 xxxxxxxxxxx

但主要问题是如何替换实际上未指定为“查找文本”的文本?

谢谢你。

PS。两个答案似乎错过了这一点,所以这可能是我的错,这没有得到澄清:

它不应该在答案之前添加额外的 xxxxxxxxxxxx,而是复制该行,例如。B:在那个问题的最后 xxxxxxxxxxxx 之后绿色正确。

以下是上述示例的示例输出:

1: How old am I?
A: 8 days
B: 75
C: 100
D: 99correct
xxxxxxxxxxxx D: 99
2: What is your favorite color?
A: blue
B: greencorrect
C: red
D: blue
xxxxxxxxxxxx B: green

显然,正确的答案可能是 A、B、C 或 D。

标签: regexreplacetextpad

解决方案


您可以使用

(?m)^([A-D]:.*?)correct$((?:\n.*)*?\nx{3,})

请参阅正则表达式演示。替换模式应该是\1\2 \1.

详情

  • (?m)- 多行内联修饰符(在文本编辑器中可能是多余的)
  • ^- 一行的开始
  • ([A-D]:.*?)- 第 1 组:A、或,然后是 a ,然后是B除换行符之外的任何零个或多个字符,尽可能少CD:
  • correct-correct一句话
  • ((?:\n.*)*?\nx{3,})- 第 2 组:
    • (?:\n.*)*?- 零行或多行,但尽可能少
    • \n- 换行符
    • x{3,}- 三个或更多x字符。

推荐阅读