正则表达式“match.Groups [”T4“]”未打印完整内容

时间:2017-12-04 08:28:17

标签: c# regex

在Regex Match组下面,为T4

提供截断的输出
var input = @": May 13 01:16:14.736 UTC: %XYZ-3-PQR: Hello R0 / 16, changed state";
        var regex = new Regex(@":\s+(?<Date>[^%]+)%(?<T1>[A-Za-z]+)-(?<T2>\d+)-(?<T3>[A-Za-z]+):\s+(?<T4>[\w]+)");
        var match = regex.Match(input);
        if (match.Success)
        {
            Console.WriteLine(match.Groups["Date"]);
            Console.WriteLine(match.Groups["T1"]);
            Console.WriteLine(match.Groups["T2"]);
            Console.WriteLine(match.Groups["T3"]);
            Console.WriteLine(match.Groups["T4"]);
        }

输出,

Date: May 13 01:16:14.736 UTC: T1: XYZ T2: 3 T3: PQR T4: Hello

T4输出应为: Hello R0 / 16,状态改变

正则表达式验证也很好。我们需要改变Regex表达式吗?

2 个答案:

答案 0 :(得分:5)

您似乎希望在T4中捕获该行的其余部分。如果是这样,那么只需使用.*,即使用以下方法捕获T4命名组:

(?<T4>.*)

<强>代码:

var input = @": May 13 01:16:14.736 UTC: %XYZ-3-PQR: Hello R0 / 16, changed state";
var regex = new Regex(@":\s+(?<Date>[^%]+)%(?<T1>[A-Za-z]+)-(?<T2>\d+)-(?<T3>[A-Za-z]+):\s+(?<T4>.*)");
var match = regex.Match(input);

以下是打印报表的输出,上面对您的正则表达式稍作修改:

May 13 01:16:14.736 UTC: 
XYZ
3
PQR
Hello R0 / 16, changed state

Demo

答案 1 :(得分:2)

速记字符类\ w与空格(或斜杠或逗号)不匹配,因此捕获在第一个空格处停止。在字符类中添加一个空格(以及斜线,逗号和您期望的任何其他非单词字符),例如[\w /,]