简单的正则表达式匹配问题,我的错误是什么?

时间:2014-03-25 10:34:12

标签: c# regex

我有一个字符串:

  

检查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#中的字符串中解析这些值?

5 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

你需要逃避正斜杠

([0-9]+\/[0-9]+) files checked

<强> Demo

答案 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();