我有一个匹配的表达式,但是试图使它不匹配,如果后面跟有后缀:一个或多个空格,三个破折号,一个或多个空格,一个或多个数字,斜杠和最后一个或多个数字。这是表达式:
(?<=(^|\s+))[A-Z]+[ ]+([0-9]+(\.[0-9]{1,3})?)/([0-9]+(\.[0-9]{1,3})?)(?!(\s+\-\-\-\s+[0-9]+/[0-9]+))
这是文本:
January 10.5/13.5 --- 22/26 ---
它与1月10.5 / 13日匹配,但我不希望它与任何内容匹配。
答案 0 :(得分:1)
由于支持环视,因此您可以将开始时的正向外观更改为向后负向外观,在左侧(?<!\S)
声明空白边界
您可以使用.*
来扫描整行,而不是从1个或更多的空白字符\s+
否定前瞻(?!.*\s-{3}\s+[0-9]+/[0-9]
断言右边不是后缀。
您可以在最后一个字符类之后省略量词+
,因为紧随其后的是1个或多个数字并不重要,只要它不是数字即可。
请注意,在当前模式中,小数部分是一个可选的捕获组2。如果要在组1中获取整个值,可以将其设为optional group。
(?<!\S)[A-Z]+[ ]+([0-9]+(\.[0-9]{1,3})?)/([0-9]+(\.[0-9]{1,3})?)(?!.*\s-{3}\s+[0-9]+/[0-9])