2012-08-19 4 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

2

. 이렇게하면 주소 자체의 하이픈이 분리되지 않습니다.

+0

감사 Kolink! 이 예에서 작동하지만 제공된 입력은 여러 개의 소스에서 복사하여 붙여 넣은 주소이므로 제공된 입력에 공백이 포함되지 않았을 가능성이 큽니다. 이상적인 세계에서 패턴은 최소 길이의 부분을 차지합니다. – Tuol