3

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

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而其余​​的仍然是空的。但它们不是空的。

4

3 回答 3

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来检查匹配是否成功。

于 2013-08-13T10:14:41.347 回答
1

正如“King King”所说,您的正则表达式不正确。这是一个工作示例:

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)
于 2013-08-13T10:23:27.317 回答
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>.+))?"

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

于 2013-08-13T10:20:29.307 回答