0

我的弱点是正则表达式,我希望有人可以帮助我。我有一个字符串:

string comment = myOrder[Original Tel Number: Some string that can be any size basically\nHome: 94036\nPostal Code: B4]

现在我试图像这样分解这个字符串:

var match = Regex.Match( comment,  @"Original Tel Number:\s(\w+)\s*\nHome:\s(\w+)\s*\nPostal Code:\s(\w+)" );

         if ( match.Success )
            {
                inputOrder.BaseHomeTel = match.Groups[1].Value;
                inputOrder.Home = match.Groups[2].Value;
                inputOrder.PostalCode = match.Groups[3].Value;
            }

但它似乎永远不匹配,我在这里做错了什么。

4

3 回答 3

1
Tel Number:\s(\w+)\s*\nHome:

匹配Tel Number:,后跟一个空白字符,后跟一个字母数字单词,然后是可选的空白和换行符,然后是Home:.

您的字符串在此处包含几个单词,这就是正则表达式失败的原因。

您可能希望允许多个单词:

@"Original Tel Number:((?:\s+\w+)+)\s*\nHome:\s(\w+)\s*\nPostal Code:\s(\w+)"
于 2013-05-07T07:07:28.087 回答
0

这将匹配您的字符串:

@"Original Tel Number:(.*?)\nHome:(.*?)\nPostal Code:(.*)"

但是我认为那些 \n:s 是换行符,根据操作系统,它们由 \n、\r 或 \r\n 匹配。所以试试这个:

@"Original Tel Number:(.*?)(?\n|\r|\r\n)Home:(.*?)(?\n|\r|\r\n)Postal Code:(.*)"

...或者您可以摆弄 RegexOptions.MultiLine 并使用 $ 来匹配换行符。

于 2013-05-07T12:43:27.870 回答
0

试试这个:

@"Original Tel Number:\s*([\w\s]+?)\s*Home:\s*([\w\s]+?)\s*Postal Code:\s*([\w\s]+)"
于 2013-05-07T07:16:01.277 回答