困难的正则表达

时间:2013-05-07 07:05:07

标签: c# regex string

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

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;
            }

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

3 个答案:

答案 0 :(得分:1)

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

匹配Tel Number:,后跟一个空格字符,后跟一个字母数字字,后跟可选空格和换行符,然后是Home:

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

您可能想要允许多个单词:

@"Original Tel Number:((?:\s+\w+)+)\s*\nHome:\s(\w+)\s*\nPostal Code:\s(\w+)"

答案 1 :(得分:0)

试试这个:

@"Original Tel Number:\s*([\w\s]+?)\s*Home:\s*([\w\s]+?)\s*Postal Code:\s*([\w\s]+)"

答案 2 :(得分:0)

这将匹配您的字符串:

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

但是我认为那些\ n:s是换行符,它们与\ n,\ n \ r或\ r \ n匹配,具体取决于操作系统。所以试试这个:

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

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