C# 找到正则表达式匹配,然后提取

C# 找到正则表达式匹配,然后提取,c#,regex,return-value,C#,Regex,Return Value,我试图从RichTextBox中读取文本,以便找到匹配表达式的第一个匹配项。然后,我想提取满足他们查询的字符串,以便将其用作变量。下面是我必须开始使用和构建的基本代码 private string returnPostcode() { string[] allLines = rtxtDocViewer.Text.Split('\n'); string expression = string expression = "^([Gg][Ii][Rr] 0[Aa]{2

我试图从RichTextBox中读取文本,以便找到匹配表达式的第一个匹配项。然后,我想提取满足他们查询的字符串,以便将其用作变量。下面是我必须开始使用和构建的基本代码

private string returnPostcode()
{
        string[] allLines = rtxtDocViewer.Text.Split('\n');
        string expression =  string expression = "^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$"            

        foreach (string line in allLines)
        {
            if (Regex.Matches(line, expression, RegexOptions.Count > 0)
            {                    
                //extract and return the string that is found
            }
        }
  }     
RichTextBox中包含的内容示例如下。我想提取上面的正则表达式应该能够找到的“E12 8SD”。谢谢

Damon Brown
Flat B University Place
26 Park Square 
London
E12 8SD
Mobile: 1111 22222
Email: dabrown192882@gmail.com  Date of birth: 21/03/1986
Gender: Male
Marital Status: Single
Nationality: English
Summary
I have acquired a multifaceted skill set with experience using several computing platforms.

您需要使用
Regex.IsMatch
并删除
RegexOptions.Count>0

string[] allLines = s.Split('\n');
string expression = "^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([AZa-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})$";

foreach (string line in allLines)
{
    if (Regex.IsMatch(line, expression)) // Regex.IsMatch will check if a string matches the regex
    {                     
        Console.WriteLine(line);         // Print the matched line
    }
}

很可能您的文本包含CR+LF换行符。然后,按如下方式调整代码:

string[] allLines = s.Split(new[] {"\r\n"}, StringSplitOptions.RemoveEmptyEntries);

更新

要使用正则表达式提取代码,无需将内容拆分为行,只需对整个文本使用
regex.Match

string s = "Damon Brown\nFlat B University Place\n26 Park Square \nLondon\nTW1 1AJ Twickenham    Mobile: +44 (0) 7711223344\nMobile: 1111 22222\nEmail: dabrown192882@gmail.com    Date of birth: 21/03/1986\nGender: Male\nMarital Status: Single\nNationality: English\nSummary\nI have acquired a multifaceted skill set with experience using several computing platforms."; 
string expression = @"(?i)\b(gir 0a{2})|((([a-z][0-9]{1,2})|(([a-z][a-hj-y][0-9]{1,2})|(([a-z][0-9][a-z])|([a-z][a-hj-y][0-9]?[a-z])))) [0-9][a-z]{2})\b";
Match res = Regex.Match(s, expression);
if (res.Success)
    Console.WriteLine(res.Value); // = > TW1 1AJ
我还删除了大写范围,用不区分大小写的修饰符
(?I)
替换它们


请参阅。

提取
E12 8SD
的条件是什么?从
E
开始,以
SD
结束,然后删除
RegexOptions.Count>0
并使用
IsMatch
您的问题到底是什么,正则表达式或如何使用它?如果输入由一行组成,正则表达式似乎不起作用:@botond.botos:您能提供一个示例输入吗?操作输入是多行的。但是,由于它是RichTextBox文本,我认为它包含
\r\n
行结尾。刚才看到了使用新输入的更新问题。它按预期工作。请尝试使用
\b
而不是
^
$
(使用
@“
逐字字符串文字)。我也刚刚找到了
[AZa-z]
,但也许你的意思是
[A-Za-z]
?检查。我添加了另一个代码片段,显示如何减少当前代码。