2017-05-09 1 views
2

운송 시스템에 대해 대문자로 표시된 방송국 이름의로드를 처리하고 "at"및 "the"와 같은 단어를 소문자로 바꾸고 싶습니다. 지금까지 내가 원하는 모든 인스턴스를 일치시킬 수 있습니다. 단 이 아닌 인스턴스가 문자열의 시작 부분에서 발생하는 것을 파악할 수 없습니다.문자열 시작 부분을 제외한 부분 문자열의 모든 인스턴스를 교체하십시오.

여기에 지금까지 내 코드입니다 (즉 "는 것"에 "일을"변경 방지) :

>>>re.sub("(?i)(?<!\w)the(?!\w)", "zzz", "The Thing To The Theme of Athens, (The) Goethe") 
'zzz Thing To zzz Theme of Athens, (zzz) Goethe' 

그리고 그는 내 현재 해결 방법입니다 :

>>>re.sub("(?i)(?<![\w|])the(?!\w)", "zzz", "|" + "The Thing To The Theme of Athens, (The) Goethe")[1:] 
'The Thing To zzz Theme of Athens, (zzz) Goethe' 

이 해결 방법은 분명하지 이상적인, 내가 "순수하게"정규식 솔루션을 갖고 싶습니다.

답변

2

당신은 변화 긍정적으로 부정적인 lookbehind을 대체 할 수 \w\W과 :

(?<!\w) 부정적인 lookbehind는 (?<=^|\W) (BTW, 파이썬에서 작동하지 않는)로 제시하고, 우리는 단지 수행해야 할 수 있습니다
(?i)(?<=\W)the(?!\w) 
    ^^^^^^^ 

그것 대신 ^ 대안. (?<=\W) 긍정적 인 lookbehind t의 바로 왼쪽에있는 단어가 아닌 char 인이 필요합니다. regex demo을 참조하십시오.

Python demo

는 :

import re 
res = re.sub(r"(?i)(?<=\W)the(?!\w)", "zzz", "The Thing To (The) Theme of Athens, The Goethe") 
print(res) # => The Thing To (zzz) Theme of Athens, zzz Goethe 
+1

빠른했다. 감사! – Zoetrophy

관련 문제