在C#中,我正在构建一个地址解析器。假设我有地址:
Av. Rouxinol 101 - São Paulo - Brasil - CEP 04516-001 - Fone + 55 11 2151
我希望将字符串拆分为单独的行。期望的结果是:
Av. Rouxinol 101
São Paulo Brasil
CEP 04516-001
Fone + 55 11 2151
按-
分割会给我5行;它还将拆分CEP(巴西邮政编码)。
所以,我想要实现的逻辑是每个部分至少应该有6个字符长,所以我想我必须使用lookbehind / forward?
到目前为止,我有:
(?<=.{6})-(?=.{6})
答案 0 :(得分:2)
您可以在␣-␣
上拆分(短划线两侧的空格)。这将确保地址本身中的连字符不会分开。
答案 1 :(得分:0)
使用正则表达式(?:^|(?<=\s-\s)).*?(?:(?=\s-\s[^-]{8,})|$)
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string input = "Av. Rouxinol 101 - Sao Paulo - Brasil - CEP 04516-001 - Fone + 55 11 2151";
Regex re = new Regex(@"(?:^|(?<=\s-\s)).*?(?:(?=\s-\s[^-]{8,})|$)", RegexOptions.Singleline);
MatchCollection matches = re.Matches(input);
foreach (Match m in matches) {
Console.WriteLine(m);
}
}
}
测试此代码 here。
输出:
Av. Rouxinol 101
Sao Paulo - Brasil
CEP 04516-001
Fone + 55 11 2151