regex 具有捕获组的负前瞻

8wtpewkr  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(110)

我有短信说

question 1, chapter 1
...
solution for question 1, chapter 1
...
question 2, chapter 1
...

我试图找出如何检测,通过 “VS代码搜索和替换” 正则表达式,没有解决方案的问题。我尝试了question (\d+), chapter (\d+)\n(.*\n+)solution for question (?!\1)的变体。这个想法是,如果问题3没有答案,我会匹配问题3,当它否定“问题4的答案”时。这似乎不起作用。我不知道为什么。
我看了几个other questions,但我不能用这些信息来弄清楚

snz8szmq

snz8szmq1#

如果在打开的文件中使用搜索框,则可以使用负向前查找,以避免与以questionsolution开头的匹配行交叉

^question\s+(\d+),\s+chapter\s+(\d+)(?!(?:\r?\n(?!question |solution ).*)*\r?\nsolution for question \1)

模式匹配:

  • ^字符串开头
  • question\s+(\d+),匹配questions,然后在组1中捕获1+个空格字符和1+个数字
  • \s+chapter\s+在1+个空格字符之间匹配chapter
  • (\d+)捕获组2中的1位以上数字
  • (?!负先行,Assert右边的不是
  • (?:\r?\n(?!question |solution ).*)*
  • \r?\n匹配换行符
  • solution for question \1匹配solution for question,后跟使用反向引用\1在组1中捕获的值
  • )关闭前瞻

参见regex demo

相关问题