C# 正则表达式为字符串中的多个数字命名捕获
给一串C# 正则表达式为字符串中的多个数字命名捕获,c#,regex,C#,Regex,给一串 var testData = "1234 test string 987 more test"; 我希望能够使用正则表达式提取1234和987。据我所知 var reg = new Regex(@"?<numbers>\d+"); 我认为 Assert.AreEqual(match.Groups["numbers"].Captures.Count(), 2); 但是只有1。我做错了什么?直觉告诉我 ?<group> ? 表示这些值中只能有0或1
var testData = "1234 test string 987 more test";
我希望能够使用正则表达式提取1234和987。据我所知
var reg = new Regex(@"?<numbers>\d+");
我认为
Assert.AreEqual(match.Groups["numbers"].Captures.Count(), 2);
但是只有1。我做错了什么?直觉告诉我
?<group>
?
表示这些值中只能有0或1个。我不应该使用命名组吗
*<group>
*
在visual studio中的正则表达式生成器中似乎不起作用,但我在测试中没有尝试过它。为什么不按如下所示使用模式字符串:
Regex reg = new Regex(@"\d+");
然后通过以下方式获取数字:
MatchCollection matches = reg.Matches(testData);
之后,matches
变量包含两个匹配值,分别表示1234和987
您还可以将断言用作:
Assert.AreEqual(matches.Count, 2);
希望它能帮助你 试试看{
try {
Regex regexObj = new Regex(@"([\d]+)", RegexOptions.IgnoreCase);
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
for (int i = 1; i < matchResults.Groups.Count; i++) {
Group groupObj = matchResults.Groups[i];
if (groupObj.Success) {
// matched text: groupObj.Value
// match start: groupObj.Index
// match length: groupObj.Length
}
}
matchResults = matchResults.NextMatch();
}
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
Regex regexObj=new Regex(@“([\d]+)”,RegexOptions.IgnoreCase);
Match matchResults=regexObj.Match(subjectString);
while(matchResults.Success){
对于(int i=1;i
我将尝试一下。我想我是在尝试使用我还没有使用过的正则表达式的更多功能。如何通过命名的捕获实现这一点?或者:foreach(在正则表达式中匹配m.Matches(s,@“\d+”){/*匹配的文本:m.Value*/}
;)另一方面,要注意正则表达式符号的这种直觉,因为诸如?
和*
等符号的含义高度依赖于上下文。例如,(?:[:\b-[-]])??(?\b)?
是一个有效的.NET正则表达式,其中每个\b
、-
、?
和:
都有不同的含义。(?)
中的?
与(?)
中的?
具有完全不同的含义,并且与中的?
没有任何关系。
try {
Regex regexObj = new Regex(@"([\d]+)", RegexOptions.IgnoreCase);
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
for (int i = 1; i < matchResults.Groups.Count; i++) {
Group groupObj = matchResults.Groups[i];
if (groupObj.Success) {
// matched text: groupObj.Value
// match start: groupObj.Index
// match length: groupObj.Length
}
}
matchResults = matchResults.NextMatch();
}
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}