다음과 같은 텍스트가 있습니다.
프랑스 외교 부대에서 평생을 보낸 후, 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]*
완벽하게 작동합니다.