2012-08-19 36 views
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}) 

回答

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 
+0

很酷!感謝名單! – Tuol 2012-08-27 13:49:52

2

你可以只在␣-␣分裂(空格上劃線的兩側)。這將確保地址中的連字符不會分開。

+0

謝謝Kolink!雖然這可以在這個例子中起作用,但是提供的輸入是來自多個元素的複製粘貼地址,所以提供的輸入很可能不包含空格。在一個理想的世界裏,這個模式佔了最小的部分長度。 – Tuol 2012-08-23 18:32:58