정규 표현식은 적절한 경우를 찾고 메모장에서 일부 단어를 제외합니다. ++ [닫힘] 텍스트가 있습니다. 프랑스 외교

다음과 같은 텍스트가 있습니다.

프랑스 외교 부대에서 평생을 보낸 후, Count de Gruse
  그의 부인과 함께 Quai Voltaire의 우아한 저택에 살았습니다. 그는
  물론 존경받는 평판을 가진 재능있는 남자
  관대 한 호스트와 재미있는 raconteur.

정규식 찾기를 사용하여 모든 적절한 경우를 찾고 싶습니다. 내 제외는 점과 같은 적절한 경우입니다.

. He

인터넷에서 검색 한 결과이 입력을 찾을 수 있습니다.

[a-z] [A-Z][\w]*

문제는 Quai를 Voltaire와 같은 2 ~ 3 단어로 표시하지 않고 어떻게 I, Me, My …와 같은 적절한 대소 문자를 제외시킬 수 있습니까?

어떻게해야합니까?



답변

나는 안드레아스에 동의한다. 자, 이것이 일회성 작업이라면 여러 단계로 나누어 볼 수 있습니다. 우선 임시로 예외를 제외하고 다른 문자를 사용하고 나중에 다시 넣는 것이 좋습니다. 다음은 찾기 및 바꾸기입니다.

\b(I|God|Dad)\b
@\1

이것은 우리에게 다음과 같은 것을줍니다. (저와 저는 영어로 대문자로 쓰지 않습니다) :

Did @I write this to @God, @Dad, or my wife? After a lifetime in the
French diplomatic corps, the Count de Gruse lived with his wife
in an elegant townhouse on Quai Voltaire! He was a likeable man,
cultivated of course, with a well-deserved reputation as a
generous host and an amusing raconteur.

거기에서 대소 문자를 구별하는 regex와 negative-lookbehind를 사용하여 대문자로 된 단어 앞에 문장 경계를 따르지 않는 하나 이상의 공백이 오는 지 확인하십시오.

 (?<![.?'!"])[ ]+[A-Z]

위의 예에서 ‘프랑스어’와 같이 단단히 감싸 인 텍스트의 경우이 방법은 실패합니다.

정규식은 다소 부서지기 쉽기 때문에 일회성 작업이 아닌 경우 작은 프로그램 / 스크립트가 필요할 수 있습니다. (또는 어쩌면 매크로.)

네가 요구 한 것은 여기에있다. 네거티브 lookahead를 통합하여 한 걸음 씩 그렇게해라. 🙂

(?<![.?'!"]) (?!Dad\b|God\b|I\b)[A-Z]

팁 : 대소 문자를 구분하지 않는 체크 박스를 사용하지 않거나 사용하지 않으려면이를 정규 표현식 앞에 넣을 수 있습니다.

(?c)

답변

정규 표현식과 복합 예외는 잘 어울리지 않습니다. 마음에 매우 빨리 온다. 자연 언어 처리 .


답변

내가 추가 할 때

[\w]*

내 정규식은

(?<![.?'!"]) (?!Dad\b|God\b|I\b)[A-Z][\w]*

완벽하게 작동합니다.