2016-07-18 2 views
1

몇 가지 경우를 제외하고 대문자 단어로 구성된 거리 이름 패턴과 일치시키고 싶지만 어떻게해야할지 모르겠다.정규식 패턴 일치 사례 목록 제외

패턴은 "([AZ] [az] + {1,3})"입니다 (거리 이름이 1-3 단어로 구성된다고 가정). 짧은 버전 차단 목록은 [ "Apt" "West", "East"] 방향 또는 방 번호를 나타냅니다.

목록에있는 단어 (예 : "West")는 일치 검색 결과에 없어야합니다. 그러나 블록 목록에있는 단어로 시작하는 단어 (예 : "Westmoreland")가 결과에 있어야합니다. 이 정규식을 어떻게 작성해야합니까? 당신은 참조

\b(?!(?:Apt|West|East)\b)[A-Z][a-z]+(?: (?!(?:Apt|West|East)\b)[A-Z][a-z]+){0,2} 

을 사용할 수 있습니다

+0

설명해 주시겠습니까? 일치해야하고 일치하지 않아야하는 몇 가지 예를 추가하십시오. 그런데 프로그래밍 언어는 무엇입니까?이미 코드를 작성 했습니까? 공유하고 어디서 붙어 있는지 알려주십시오. –

+0

내 질문 좀 봐 주셔서 고마워. 전체 차단 목록은 방 번호 및 거리 표시기 (Apt, 아파트, 룸, 룸, N, W, E, NW, 서부, 북부, Ave, Blvd 드라이브 등)의 모든 형태로 구성됩니다. 목록에있는 단어와 정확히 일치하는 단어는 결과에 나타나서는 안되며, 그 단어로 시작하는 단어는 목록에 있어야합니다. 예를 들어, "Westmore"는 결과에 있어야하지만 "West"는 결과에 있어서는 안됩니다. 나는 물리 주소의 다른 부분이 올 때 내 멈추고 싶다. –

+0

나는 modulus를 사용하여 파이썬을 다시 사용하고 있으며, 대문자 부분을 쓰는 방법 만 알고 있으며, 차단 목록에서 해당 단어를 제외하는 방법을 모릅니다. –

답변

0

regex demo

내가 무슨 짓 님의 [A-Z][a-z]+(?: [A-Z][a-z]+){0,2}

  • 추가 부정적인 lookaheads :

    • 실제로 1 ~ 3 개 단어를 일치하도록 정규식을 고정 [A-Z][a-z]+ 부분과 일치하는 값을 제한하십시오.

    자세한 사항 :

    • \b(?!(?:Apt|West|East)\b)[A-Z][a-z]+ - ([A-Z])는 1+ ASCII 소문자로 다음에 자본 ASCII 문자 ([a-z]하지만 난 당신이 여기 [a-zA-Z]+ 또는 [a-zA-Z]*을 사용할 수 있습니다 생각)되지 않습니다 전체 단어 Apt, West 또는 East\b 단어 경계에 고정 된 네가티브 미리보기 헤드로 가능합니다. 가 첫 번째 \b는 선도적 인 단어 경계하고 부정적 예측이 확실하게 더 Apt하지 West 또는 East 오른쪽 단어 경계 후, 그리고 후행 \b 단어 경계하기 전에 (보장 전체 단어 일치)
    • (?: (?!(?:Apt|West|East)\b)[A-Z][a-z]+){0,2}-0 2 개 발생에 - 공간
    • (?!(?:Apt|West|East)\b)[A-Z][a-z]+ -
      • 위를 참조하십시오. Apt, West 또는 East은 여기에 공백이있는 단어 뒤에 표시 될 수 있기 때문에 앞선 단어 경계가 필요하지 않습니다. 단어가 아닌 문자입니다.

    많은 사람들이 그러나 demo

    를 참조

    (?: ?\b(?!(?:Apt|West|East)\b)[A-Z][a-z]+){1,3} 
    

    같은 짧은 솔루션을 게시 할 것, 시작시 선택 사양 공간이 선행 공백을 일치합니다. 이제까지는 정규식이 선형 적으로 일치하지 않아 성능에 영향을 미칩니다. 작은 현과 함께, 괜찮습니다.하지만 여전히 나쁜 습관입니다.