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

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:27:24

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

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和休息仍然空着。但它们并非为空。

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

原因是你的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检查匹配是否成功。

与其使用正则表达式,不如按空格拆分

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>.+))?"

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

正如"国王"所说,你的正则表达式是不正确的。 下面是一个工作示例:

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)