有没有办法形成这个正则表达式,以便可选组不会最终进入匹配组
本文关键字:正则表达式 有没有 | 更新日期: 2023-09-27 18:33:53
我有以下代码用于正则表达式匹配:
Match regexMatch(string inputStr)
{
string numberAlphaCaptureRegex = @"^([0-9]+([.][0-9]+)?)'W*([A-Z]*)$";
return Regex.Match(inputStr,numberAlphaCaptureRegex);
}
我打算用它来匹配以下字符串:
3 ##+ AST
2.54 --&! V
99.22
我使用以下代码进行匹配:
match = Regex.Match(valveName, numberAlphaCaptureRegex);
在第一个示例中,我希望匹配项具有组3
组和AST
组,在第二个2.54
和V
组中,以及在第三个99.22
中。 第一个工作正常,但第二个还包括组.54
,第三个还包括.22
。 我认为这是因为表达式具有可选的组([.][0-9]+)?
,我添加了该组,以便我将同时选择整数和小数。 有没有办法重写正则表达式,以便我只能获得完整的数字?
将第二个捕获组更改为非捕获组:
string numberAlphaCaptureRegex = @"^([0-9]+(?:[.][0-9]+)?)'W*([A-Z]*)$";
作为旁注,第二个捕获组([A-Z]*)
有时会匹配零个字符(因为*
表示零或更多)。若要防止出现这种情况,可以将*
更改为+
(一个或多个),然后将捕获组设置为可选,([A-Z]+)?
。
现场示例
string numberAlphaCaptureRegex = @"^([0-9]+(?:'.[0-9]+)?)'W*([A-Z]+)?$";
根据您提供的输入进行匹配:
MATCH 1
1. [0-1] `3`
2. [6-9] `AST`
MATCH 2
1. [10-14] `2.54`
2. [20-21] `V`
MATCH 3
1. [22-27] `99.22`