我有正则表达式匹配的代码:
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]+)?
,我已经添加了该组,以便我可以获取整数和小数。有没有办法重写正则表达式,以便我只获得完整的数字?
答案 0 :(得分:1)
将第二个捕获组改为a non-capturing 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`