在匹配正则表达式时,我想从结果中排除非捕获组.我错误地认为他们被默认排除在外,因为他们被称为非捕获组.
但是出于某种原因,Regex.Match表现得好像我甚至没有指定一个非捕获组.尝试在立即窗口中运行它:
System.Text.RegularExpressions.Regex.Match("b3a",@"(?:\d)\w").Value
Run Code Online (Sandbox Code Playgroud)
我期待结果
"a"
Run Code Online (Sandbox Code Playgroud)
但实际上
"3a"
Run Code Online (Sandbox Code Playgroud)
这个问题建议我查看各组,但结果中只有一个组,它也是"3a".它包含一个Capture,也就是"3a".
这里发生了什么?Regex是否有问题,或者我需要设置一个选项吗?
匹配与捕获不同.(?:\d)简单地表示匹配包含\d但不打扰将其放入捕获组的子模式.你的整个模式(?:\d)\w寻找a (?:\d)后跟a \w; 它在功能上等同于\d\w.
如果你\w只想在a之前匹配a ,那么\d使用lookbehind断言:
System.Text.RegularExpressions.Regex.Match("b3a", @"(?<=\d)\w").Value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |