.net Regex lookahead仅删除最后一个字符
我正在创建一个正则表达式来搜索文本,但前提是匹配后没有破折号。我正在为此使用lookahead:.net Regex lookahead仅删除最后一个字符,.net,regex,negative-lookahead,.net,Regex,Negative Lookahead,我正在创建一个正则表达式来搜索文本,但前提是匹配后没有破折号。我正在为此使用lookahead: 正则表达式:Text[\s\.][0-9]*(?!-) 预期结果 --------------- ------- 文本11文本11文本11 文本52-文本5 测试用例: 向前看似乎只与前一个字符匹配,这给我留下了Text 5,而我需要它完全不返回匹配 我正在查看指南并尝试使用群组,但我无法理解这一点 如何使lookback函数影响前面的整个匹配 我正在使用默认的.Net Text.Reg
- 正则表达式:
Text[\s\.][0-9]*(?!-)
预期结果
--------------- -------
文本11文本11文本11
文本52-文本5
测试用例:
向前看似乎只与前一个字符匹配,这给我留下了Text 5
,而我需要它完全不返回匹配
我正在查看指南并尝试使用群组,但我无法理解这一点
如何使lookback函数影响前面的整个匹配
我正在使用默认的.Net Text.RegularExpressions库。即使存在
-
,该[0-9]*
也会回溯并让正则表达式引擎找到匹配项
有两种方法:使用原子组或在前瞻中检查数字:
Text[\s.][0-9]*(?![-\d])
或
请参阅和
详细信息
匹配Text[\s.][0-9]*(?![-\d])
,然后是一个点或空白,然后是0或更多数字,然后它检查右侧是否有Text
或数字,如果有,则匹配失败。即使尝试回溯并匹配比以前更少的数字,前瞻中的-
也会失败\d
匹配Text(?>[\s.][0-9]*)(?!-)
,然后启动一个原子组,在组模式找到匹配的文本后,将不允许回溯Text
仅在(?!-)
模式尝试获取任何数字后检查[0-9]*
-
Text[\s.][0-9]*+(?!-)
。
Text(?>[\s.][0-9]*)(?!-)