正则表达式 - 不完全匹配 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
告诉我它是否不适合你...
你可以使用
(?m)^([A-D]:.*?)correct$((?:\n.*)*?\nx{3,})
见regex demo。替换模式应该是
.
详情:
(?m)
- 多行内联修饰符(在文本编辑器中可能是多余的)
^
- 行首
([A-D]:.*?)
- 第 1 组:A
、B
、C
或 D
,然后是 :
,然后是任意零或尽可能少的除换行符以外的字符
correct
- 一个correct
字
((?:\n.*)*?\nx{3,})
- 第 2 组:
(?:\n.*)*?
- 零行或多行,但越少越好
\n
- 换行符
x{3,}
- 三个或更多 x
个字符。
我有一个类似于以下内容的测验:
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
告诉我它是否不适合你...
你可以使用
(?m)^([A-D]:.*?)correct$((?:\n.*)*?\nx{3,})
见regex demo。替换模式应该是
.
详情:
(?m)
- 多行内联修饰符(在文本编辑器中可能是多余的)^
- 行首([A-D]:.*?)
- 第 1 组:A
、B
、C
或D
,然后是:
,然后是任意零或尽可能少的除换行符以外的字符correct
- 一个correct
字((?:\n.*)*?\nx{3,})
- 第 2 组:(?:\n.*)*?
- 零行或多行,但越少越好\n
- 换行符x{3,}
- 三个或更多x
个字符。