我的弱点是正则表达式,我希望有人可以帮助我。 我有一个字符串:
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;
}
但它似乎永远不会匹配,我在这里做错了什么。
答案 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并使用$来匹配换行符。