2012-01-22 2 views
1

다른 텍스트로 주소를 찾으려고합니다. 이것은 단어 뒤에 날짜 (foobar 22.01.2012 => 주소 : foobar 22)가 일치한다는 점을 제외하고는 꽤 잘 작동합니다.그래서 거리 번호에 "\\"를 붙여서는 안되는 방식으로 정규식을 개선하고 싶습니다. | :) \ D "RegEx가 다음 그룹과 일치하지 않습니다. .

이 내가 무엇을 가지고 :

(?<str>\b([a-zA-Z]+-*[a-zA-Z]+(-|\s)*([a-zA-Z]|-)+)\b\.?\s{1})(?<no>\d+(\s?[a-zA-Z])?\b) 

대표 텍스트 :

상담 시간
월요일는 06.02입니다. 금요일까지, 10.02.212 및
월요일, 13.02. 화요일의 14.02.2012,
각 14.00-15.30시, 2 층,
오전 Fasanengarten (12)는 foobar
Schlossstr까지. 34

무엇을 찾아야합니까?
Am Fasanengarten 12
Schlossstr. 34

무엇이 있습니까?
각 14
오전 Fasanengarten 12
는 foobar // 왜이 일치인가? 번호가 없습니까?
Schlossstr. 34

다른 긍정/부정적인 lookbehinds/-하지만 머리가 없지만 행운을 보았습니다.

+0

무엇이"Am Fasanengarten 12 Scholossstr. 34 "는 문자의 나머지 부분에서 알파벳 문자, 숫자 및 마침표로 구성된 단어가 있으며 각 단어는 공백으로 구분됩니다. 전체 텍스트에도 해당됩니다. 단어가 대문자로 표시되는지 여부 중요한 것 같아요? - 당신은 이것으로부터 교훈을 얻을 수 있다고 생각합니다 : 정규 표현식을 작성하려고 할 때마다 정확하게 일치시키고 싶지 않은 부분과 정확히 일치해야하는 부분을 명확하게해야합니다. –

답변

1

전혀 없다는 것을 최종 보증한다 그것을 here on Regexr

부정적인 내다 (?![.:]\d)를 참조하십시오 여기

(?<str>\b(?:[a-zA-Z]+-*[a-zA-Z]+(?:[ \t-])*(?:[a-zA-Z]|-)+)\b\.?\s)(?<no>\d+(?:\s?[a-zA-Z])?\b)(?![.:]\d) 

이 시도 "를." ":"다음에 \d이옵니다.

foobar // 왜 이것이 일치합니까? 번호가 없습니까?
Schlossstr. 당신은 내가 [ \t-] 내 솔루션이를 대체 streetname

(?<str>\b([a-zA-Z]+-*[a-zA-Z]+(-|\s)*([a-zA-Z]|-)+)\b\.?\s{1})(?<no>\d+(\s?[a-zA-Z])?\b) 
           ^^ here 

의 단어 사이 \s을 수 있기 때문에

이 (34)가 일치, 이것은 단지 공간, 탭 및 하이픈을 할 수 있습니다.

\s은 "공백"이며 여기에는 줄 바꿈 문자도 포함되어 있기 때문에이 그룹이 foobar와 일치하므로 그룹을 보았을 때 "foobar Schlossstr"주소와 일치한다는 것을 알았을 것입니다.34 "

+0

감사합니다. 많이, 스템 빠! 지금은 완벽 해 보인다! :) – user1163680