正则表达式-不匹配全文/替换其他部分



我有一个类似于下面的测试:

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

但是主要的问题是,我如何替换实际上没有指定为"查找文本"的文本?

谢谢。

p。两个答案似乎忽略了这一点,所以这可能是我的错,没有澄清:

不应该在答案前添加额外的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。

可以使用

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

参见regex演示。替换图案应为12 1

细节:

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

我从来没有特别使用过Textpad,但在Sublime Text 3中,你可能想做这样的事情:

FIND:      ^([A-D]:sS.*?)correct$
REPLACE:   xxxxxxxxxxxx $1.

它会把你的例子变成:

<...>
xxxxxxxxxxxx D: 99.
<...>
xxxxxxxxxxxx B: green.
<...>

请注意,由于我使用^$(一行的开头和结尾),如果您的编辑器要求您启用多行模式,如果默认模式不适合您,请尝试启用它。

试试这个查找:([A-D]:[w ]*correct)
替换:xxxxxxxxxxxx 1

输出:

1: How old am I?
A: 8 days
B: 75
C: 100
xxxxxxxxxxxx D: 99correct
xxxxxxxxxxxx
2: What is your favorite color?
A: blue
xxxxxxxxxxxx B: greencorrect
C: red
D: blue
xxxxxxxxxxxx
<<p>Regex101演示/strong>

如果它不适合你,告诉我…

最新更新