regex - 正则表达式 - 不匹配全文/替换其他部分
问题描述
我有一个类似于以下内容的测验:
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。
解决方案
您可以使用
(?m)^([A-D]:.*?)correct$((?:\n.*)*?\nx{3,})
请参阅正则表达式演示。替换模式应该是\1\2 \1
.
详情:
(?m)
- 多行内联修饰符(在文本编辑器中可能是多余的)^
- 一行的开始([A-D]:.*?)
- 第 1 组:A
、或,然后是 a ,然后是B
除换行符之外的任何零个或多个字符,尽可能少C
D
:
correct
-correct
一句话((?:\n.*)*?\nx{3,})
- 第 2 组:(?:\n.*)*?
- 零行或多行,但尽可能少\n
- 换行符x{3,}
- 三个或更多x
字符。
推荐阅读
- r - 如何使用“x统一”模式更改R plotly悬停标签的顺序
- macos - Sublime 将文件名截断为 50 个字符
- c - 为什么我使用递归的阶乘程序不起作用
- sql - SQL - 在 SQL 中跟踪超过 2 分钟速度为 0 的时间量
- c++ - 我不能在 else if 语句中调用函数
- python - 如何将异常堆栈跟踪重定向到文件?
- node.js - nodemailer 解析 localhost 而不是 smtp 传输定义
- python - 网络浏览器中的图像未呈现
- r - 迭代 R 中交叉表的指定列
- elasticsearch - 使用 OR 运算符进行 Elasticsearch 评分