正则表达式 - 不完全匹配 Text/Replacing 其他部分

Regular Expression - Not Matching Full Text/Replacing Other Parts

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

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:  xxxxxxxxxxxx

不幸的是,它没有用,因为它用整个测验替换了整个测验,然后添加了 xxxxxxxxxxx

但主要问题是如何替换实际上未指定为 'find text' 的文本?

谢谢。

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

不应该在答案前添加额外的 xxxxxxxxxxxx,而是复制该行,例如。 B: greencorrect 在那个问题的最后 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。

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

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

它将把你的例子变成:

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

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

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

输出:

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

Regex101 Demo

告诉我它是否不适合你...

你可以使用

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

regex demo。替换模式应该是 .

详情:

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