C# - RegEx - 获取两行之间的字符串

Posted

技术标签:

【中文标题】C# - RegEx - 获取两行之间的字符串【英文标题】:C# - RegEx - Get Strings Between Two Lines 【发布时间】:2016-07-12 06:59:47 【问题描述】:

这几天我一直在纠结这个问题。

问题:如何在 C# 中的两行之间提取多个符合我的搜索条件的字符串?

这是我目前的流程:

    读取文件的所有行。

    text_file = "C:\test.txt";
    string[] file_text = File.ReadAllLines(text_file);
    

    遍历文件的每一行并搜索匹配项

    foreach (string line in file_text)
    
        Regex r1 = new Regex(@"Processor\(s\):\s+.+\n\s+(.+)\nBios Version:");
    
        Match match1 = r1.Match(line);
    
        if (match1.Success)
        
            string processor = match1.Groups[1].Value;
            // Just to see if I matched anything
            System.Windows.MessageBox.Show(processor);
        
    
    

    这里是示例文本:

    Processor(s):              1 Processor(s) Installed.
                               [01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2826 Mhz
    BIOS Version:              Phoenix Technologies LTD 6.00, 7/30/2013
    

问题:我使用了网站“RegExr”和“Regex101”,这表明处理器名称应在“Groups[1]”中捕获,但当我尝试转储时似乎没有捕获任何内容它到一个消息框。

任何建议将不胜感激!

谢谢!

【问题讨论】:

您将文件读入一个行数组,并使用正则表达式匹配多行。这是不可能的。如果您想读入整个文件,请将其全部读入一个变量,然后在整个文本上使用您的正则表达式和换行符。 【参考方案1】:

更改您的代码以将所有文件读入单个字符串变量,然后针对该变量运行正则表达式:

text_file = "C:\test.txt";
string file_text = File.ReadAllText(text_file);

Regex r1 = new Regex(@"Processor\(s\):\s+.+\n\s+(.+)\nBIOS Version:");

Match match1 = r1.Match(file_text);

【讨论】:

谢谢!我听从了 Wiktor 和你的建议,我能够提取数据!我面临的唯一问题是它只抓取一场比赛,而不是所有比赛。现在想弄清楚。

以上是关于C# - RegEx - 获取两行之间的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .NET C# regex 或其他任何方法提取 *>...* 之间的文本字符串?

RegEx表示字符串中的N个空格

C# Regex - 如何从字符串中删除多个成对的括号

正则表达式,匹配除 \r \n 之外的所有内容作为普通字符

Boost:regex_search - 括号之间的匹配字符串

使用Regex从C#中的一个表中获取3条信息