首页 > 解决方案 > 如何在正则表达式中找到除表达式之外的任何内容?

问题描述

我试图找到一个以单词“a”或单词“b”开头并以它们结尾的段落(但它们不包括在最后),我找到了一个这样做的正则表达式,但问题是文本介于这两个条件之间的不应匹配多个点并后跟一个数字。像这样的东西:“............ 889”我试过这样的东西

(a|b)(?!([.]+[0-9]+))(?=(a|b))

a 或 b 后跟除多个点之外的任何内容和不包括的数字和 a 或 b

如果我提供这样的输入

a xxx 
................... 899
xxx
b
xxx
a

我应该得到

b
xxx

标签: regex

解决方案


您可以匹配 a 或 b 后跟不以 a 或 b 或多个点和一个数字开头的所有行。

然后你可以断言下一行确实以 a 或 b 开头。

请注意,在最后一个点和数字之后有一个空格。

[ab]\b(?!\.+\s*\d).*(?:\r?\n(?![ab]|.*\.+\s*\d).*)*(?=\r?\n[ab]\b)

模式匹配

  • [ab]\b匹配 a 或 b
  • (?!\.+\s*\d).*检查它后面是否没有点和数字
  • (?:非捕获组
    • \r?\n(?![ab]|.*\.+\s*\d).*如果它不以 a 或 b 或点后跟数字开头,则匹配整行
  • )*关闭组并选择性地重复它以匹配所有行
  • (?=\r?\n[ab]\b)检查下一行的 a 或 b

正则表达式演示

如果在 a 或 b 之后有换行符,则更短

^[ab](?:\r?\n(?![ab]$|.*\.+\s*\d).*)*(?=\r?\n[ab]$)

正则表达式演示


推荐阅读