2

在 C# 中,我正在构建一个地址解析器。假设我有地址:

Av. Rouxinol 101 - São Paulo - Brasil - CEP 04516-001 - Fone + 55 11 2151

我希望将字符串拆分为单独的行。期望的结果是:

  1. Av. Rouxinol 101
  2. São Paulo Brasil
  3. CEP 04516-001
  4. Fone + 55 11 2151

拆分-将给我 5 行;它还将拆分 CEP(巴西邮政编码)。

所以,我想实现的逻辑是每个部分至少应该有 6 个字符长,所以我想我必须使用lookbehind/forward?

到目前为止,我有:

(?<=.{6})-(?=.{6})
4

2 回答 2

2
于 2012-08-19T00:19:41.777 回答
0

Use regex (?:^|(?<=\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);
    }
  }
}

Test this code here.

Output:

Av. Rouxinol 101
Sao Paulo - Brasil
CEP 04516-001
Fone + 55 11 2151
于 2012-08-19T00:30:32.540 回答