Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Regex lookahead仅删除最后一个字符_.net_Regex_Negative Lookahead - Fatal编程技术网

.net Regex 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

我正在创建一个正则表达式来搜索文本,但前提是匹配后没有破折号。我正在为此使用lookahead:

  • 正则表达式:
    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])
    匹配
    Text
    ,然后是一个点或空白,然后是0或更多数字,然后它检查右侧是否有
    -
    或数字,如果有,则匹配失败。即使尝试回溯并匹配比以前更少的数字,前瞻中的
    \d
    也会失败
  • Text(?>[\s.][0-9]*)(?!-)
    匹配
    Text
    ,然后启动一个原子组,在组模式找到匹配的文本后,将不允许回溯
    (?!-)
    仅在
    [0-9]*
    模式尝试获取任何数字后检查
    -

谢谢!我想我会使用原子分组的情况,它让我觉得更有逻辑。@Damntry是的,它更有意义。如果.NET正则表达式支持所有格量词,它会更简洁:
Text[\s.][0-9]*+(?!-)
Text(?>[\s.][0-9]*)(?!-)