我有以下字符串
"98225-2077贝灵汉瓦“
我需要使用Regex来区分Zip代码,城市和州。小组应返回(98225-2077)(贝灵汉)和(佤族)。国家是可选的,总是在最后,将由两个大写字母组成。
我能够使用regex筛选出以下内容
邮政编码:(^([\S]+-)?\d+(-\d+)?) - Group1
城市:((^([\S]+-)?\d+(-\d+)?)\s)?(\S.*) = Group5。
是否可以有一个单一的正则表达式来过滤掉使用相同正则表达式的所有三个正则表达式,并在状态不存在的情况下返回空白?
发布于 2016-04-19 05:16:27
我会选择只分割空间上的字符串,然后根据需要使用不同的部分。因为您的城市名称可能包含多个单词,所以我从第二个元素到下一个元素迭代来构建城市名称。此解决方案假定邮政编码和状态两个缩写将始终是单个单词。
string address = "98225-2077 Bellingham WA";
string[] tokens = address.Split(' ');
string city = "";
for (int i=1; i < tokens.Length-1; i++)
{
if (i > 1)
{
city += " ";
}
city += tokens[i];
}
Console.WriteLine("zip code: {0}", tokens[0]);
Console.WriteLine("city: {0}", city);
Console.WriteLine("state: {0}", tokens[tokens.Length-1]);发布于 2016-04-19 05:21:04
简单!
^([\d-]+)\s+(.+?)\s*([A-Z]{2})?$https://regex101.com/r/tL4tN5/1
解释:
^([\d-]+):^表示字符串的开头。位数的\d\s+(.+?)\s*:在邮政编码和状态之间获取任何东西([A-Z]{2})?$:{2}表示指定范围内的2个字符( [A-Z] )。?意味着它存在1次或0次。发布于 2016-04-19 05:47:15
https://stackoverflow.com/questions/36709114
复制相似问题