.net – 正则表达式 – 重复组

前端之家收集整理的这篇文章主要介绍了.net – 正则表达式 – 重复组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试读取日志文件并使用正则表达式提取一些机器/设置信息.以下是日志中的示例:
...
COMPUTER INFO:
 Computer Name:                 TESTCMP02
 Windows User Name:             testUser99
 Time Since Last Reboot:        405 Minutes
 Processor:                     (2 processors) Intel(R) Xeon(R) cpu            5160  @ 3.00GHz
 OS Version:                    5.1 .number 2600:Service Pack 2
 Memory:                        RAM: 48% used,3069.6 MB total,1567.3 MB free
 ServerTimeOffSet:              -146 Seconds 
 Use Local Time for Log:        True

INITIAL SETTINGS:
 Command Line:                  /SKIPUPDATES
 Remote Online:                 True
 INI File:                      c:\demoapp\system\DEMOAPP.INI
 DatabaseName:                  testdb
 sql Server:                    10.254.58.1
 sql UserName:                  sqlUser
 ODBC Source:                   TestODBC
 Dynamic ODBC (not defined):    True
...

我想捕获每个“块”数据,使用标题作为一个组,数据作为第二个(即“计算机信息”,“计算机名称:…….”)并重复每个块.到目前为止的表达是

(?s)(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n)

这样可以将块块拉出来,就像它应该的那样,这很棒.但是我需要让它重复捕捉,我似乎无法获得.我尝试了几种分组表达式,包括

(?s)(?:(\p{Lu}{1,}:\r\n)(.*\r\n\r\n))*

这似乎是正确的,但我得到了许多空组项值的NULL结果组.我正在使用.Net RegEx类来应用表达式,任何人都可以帮助我吗?

重复的团体是不可能的.该组将包含最后一场比赛.

你需要把它分成两个问题.首先,找到每个部分:

new Regex(@"(?>^[A-Z\s]+:\s*$)\s*(?:(?!^\S).)*",RegexOptions.Singleline | RegexOptions.Multiline);

然后,在每个匹配中,使用另一个正则表达式将每个字段/值与组匹配:

new Regex(@"^\s+(?<name>[^:]*):\s*(?<value>.*)$",RegexOptions.Multiline);

使用它的代码看起来像这样:

Regex sectionRegex = new Regex(@"(?>^[A-Z\s]+:\s*$)\s*(?:(?!^\S).)*",RegexOptions.Singleline | RegexOptions.Multiline);
Regex nameValueRegex = new Regex(@"^\s+(?<name>[^:]*):\s*(?<value>.*)$",RegexOptions.Multiline);
MatchCollection sections = sectionRegex.Matches(logData);
foreach (Match section in sections)
{
    MatchCollection nameValues = nameValueRegex.Matches(section.ToString());
    foreach (Match nameValue in nameValues)
    {
        string name = nameValue.Groups["name"].Value;
        string value = nameValue.Groups["value"].Value;
        // OK,do something here.
    }
}

猜你在找的正则表达式相关文章