C#正则表达式匹配,但没有写入值

时间:2013-08-13 10:08:12

标签: c# regex winforms

我有这样的正则表达式,但它匹配,但它没有添加我的值。那是为什么?

Regex regex = new Regex(@"^(?:(?<C0>Lab) (?<C1>\S+) (?<C2>\S+) (?<C3>\S+) (?<C4>\S+) (?<C5>\S+) (?<C6>\S+) (?<C7>.+))$");

这是我的文字示例:

Lab restart int(3) 4332 Range success (Var:4.344-1)

最后我想把我的等等放到我的var上。我是这样做的。

Param0 = match.Groups["C0"].ToString();
Param1 = match.Groups["C1"].ToString();
Param2 = match.Groups["C2"].ToString();
Param3 = match.Groups["C3"].ToString();
Param4 = match.Groups["C4"].ToString();
Param5 = match.Groups["C5"].ToString();
Param6 = match.Groups["C6"].ToString();
Param7 = match.Groups["C7"].ToString();

Param0Param1和其他人仍然是空的。但它们不是空的。

3 个答案:

答案 0 :(得分:3)

原因是你的match.Success = false。 reg表达式不匹配输入字符串。尝试删除最后一组:

Regex regex = new Regex(@"^(?:(?<C0>Lab) (?<C1>\S+) (?<C2>\S+) (?<C3>\S+) (?<C4>\S+) (?<C5>\S+) (?<C6>\S+))$");

Param0 = match.Groups["C0"].ToString();
Param1 = match.Groups["C1"].ToString();
Param2 = match.Groups["C2"].ToString();
Param3 = match.Groups["C3"].ToString();
Param4 = match.Groups["C4"].ToString();
Param5 = match.Groups["C5"].ToString();
Param6 = match.Groups["C6"].ToString();

您应该先使用match.Success检查匹配是否成功。

答案 1 :(得分:1)

不是使用正则表达式,而是可以按空格分割

var myString = "Lab restart int(3) 4332 Range success (Var:4.344-1)"
var split = myString.Split(" ");

然后你将拥有字符串数组中的所有参数,你的正则表达式只是按空格分割。

你的正则表达式的问题是最后一个组必须在那里,而且目前你没有那个,在这种情况下,正则表达式看起来应该更像这样:

"(?<C0>Lab) (?<C1>\S+) (?<C2>\S+) (?<C3>\S+) (?<C4>\S+) (?<C5>\S+) (?<C6>\S+)(?: (?<C7>.+))?"

通过在空格和捕获组周围添加括号,然后在末尾添加?,最后一组成为可选项。

答案 2 :(得分:1)

正如“金王”所说,你的正则表达式是不正确的。这是一个有效的例子:

Regex regex = new Regex(@"^(?:(?<C0>Lab) (?<C1>\S+) (?<C2>\S+) (?<C3>\S+) (?<C4>\S+) (?<C5>\S+) (?<C6>\S+))$");
string s = "Lab restart int(3) 4332 Range success (Var:4.344-1)";
Match match = regex.Match(s);

string Param0 = match.Groups["C0"].ToString();
string Param1 = match.Groups["C1"].ToString();
string Param2 = match.Groups["C2"].ToString();
string Param3 = match.Groups["C3"].ToString();
string Param4 = match.Groups["C4"].ToString();
string Param5 = match.Groups["C5"].ToString();
string Param6 = match.Groups["C6"].ToString();

Console.Write(Param0 + "\r\n"
            + Param1 + "\r\n"
            + Param2 + "\r\n"
            + Param3 + "\r\n"
            + Param4 + "\r\n"
            + Param5 + "\r\n"
            + Param6 + "\r\n"
            );

输出结果为:

Lab
restart
int(3)
4332
Range
success
(Var:4.344-1)