我有一个字符串:
检查1/45文件
我想从中解析数字(1和45),但首先要检查字符串是否与此模式匹配。所以我写了一个正则表达式:
String line = "1/45 files checked";
Match filesProgressMatch = Regex.Match(line, @"[0-9]+/[0-9]+ files checked");
if (filesProgressMatch.Success)
{
String matched = filesProgressMatch.Groups[1].Value.Replace(" files checked", "");
string[] numbers = matched.Split('/');
filesChecked = Convert.ToInt32(numbers[0]);
totalFiles = Convert.ToInt32(numbers[1]);
}
我希望matched
包含“1/45”,但实际上它是空的。我的错是什么?
我的第一个想法是'/'是正则表达式中的一个特殊字符,但似乎并非如此。
P上。 S.有没有更好的方法从C#中的字符串中解析这些值?
答案 0 :(得分:1)
答案 1 :(得分:1)
使用捕获组:
Regex.Match(line, @"([0-9]+/[0-9]+) files checked");
# here __^ and __^
您还可以使用2组:
Regex.Match(line, @"([0-9]+)/([0-9]+) files checked");
答案 2 :(得分:1)
您的正则表达式是匹配的,但您正在选择组[1],其中组的计数为1。所以使用
String matched = filesProgressMatch.Groups[0].Value.Replace(" files checked", "");
你应该没事。
答案 3 :(得分:0)
将替换操作应用于filesProgressMath.Groups
的第一个元素似乎有效。
String matched = filesProgressMatch.Groups[0].Value.Replace(" files checked", "");
答案 4 :(得分:0)
这可以为您提供结果
string txtText = @"1\45 files matched";
int[] s = System.Text.RegularExpressions.Regex.Split(txtText, "[^\\d+]").Where(x => !string.IsNullOrEmpty(x)).Select(x => Convert.ToInt32(x)).ToArray();