我有这样的正则表达式,但它匹配,但它没有添加我的值。那是为什么?
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();
Param0
,Param1
和其他人仍然是空的。但它们不是空的。
答案 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)