正则表达式以最小长度分割

时间:2012-08-19 00:15:22

标签: regex

在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. -分割会给我5行;它还将拆分CEP(巴西邮政编码)。

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

    到目前为止,我有:

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

2 个答案:

答案 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