[英]Regex lookahead only removing the last character
我正在创建一个搜索文本的正则表达式,但前提是匹配后没有破折号。 我为此使用前瞻:
Text[\\s\\.][0-9]*(?!-)
Expected result Result --------------- ------- Text 11 Text 11 Text 11 Text 52- <No Match> Text 5
测试用例: https : //regex101.com/r/doklxc/1/
前瞻似乎只与前一个字符匹配,这给我留下了Text 5
,而我需要它根本不返回匹配项。
我检查了https://www.regular-expressions.info/指南并尝试使用组,但我无法理解这个。
我怎样才能让lookbehind函数影响整个前面的匹配?
我使用默认的 .Net Text.RegularExpressions 库。
[0-9]*
回溯并让正则表达式引擎找到匹配项,即使有-
。
有两种方法:使用原子组或在前瞻中检查数字:
Text[\s.][0-9]*(?![-\d])
或者
Text(?>[\s.][0-9]*)(?!-)
请参阅正则表达式演示 #1和正则表达式演示 #2 。
细节
Text[\\s.][0-9]*(?![-\\d])
匹配Text
,然后是一个点或一个空格,然后是 0 个或多个数字,然后它立即检查是否有-
或数字正确,如果有,则匹配失败。 即使尝试回溯和匹配比以前更少的数字时,前瞻中的\\d
也会使这些尝试失败Text(?>[\\s.][0-9]*)(?!-)
匹配Text
,然后一个原子组开始,在组模式找到匹配的文本后,回溯不会被允许。 (?!-)
仅在[0-9]*
模式尝试获取任何数字后检查-
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.