我有此代码用于正则表达式匹配:
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
。我认为这是因为表达式具有可选的group ([.][0-9]+)?
,我已经添加了group ,以便我可以同时选择整数和小数。有没有办法重写正则表达式,以便我只得到完整的数字?
将第二个捕获组更改为非捕获组:
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`
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句