繁体   English   中英

正则表达式前瞻只删除最后一个字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM