몇 가지 문제가 있습니다.
먼저 IGNORECASE
/I
플래그를 사용하여 대소 문자를 무시하지 않는 한 대/소문자를 구분합니다. 따라서 'AND'
은 'and'
와 일치하지 않습니다.
또한 VERBOSE
/X
플래그를 사용하지 않으면 해당 공백이 패턴의 일부입니다. 따라서 이 아니라 'AND '
을 확인합니다. 원한다면 각면에 공간이 있어야 할 것입니다 (그렇지 않으면 'band leader'
이 일치 할 것입니다 ...). 실제로는 \b
이 아니라 공백이 필요합니다 (그렇지 않으면 'And another thing'
으로 시작하는 문장이 진행되지 않습니다. 일치). 당신이 생각하는 경우
마지막으로, 당신은 당신이 search
, findall
, 또는 finditer
보다는 match
을 사용하고 싶었 좋은 기회가있다, 당신의 패턴 및 $
및 주위 ^
전후 .*
이 필요합니다.
그래서 :
>>> s = "These are oranges and apples and pears, but not pinapples or .."
>>> r = re.compile(r'\bAND\b | \bOR\b | \bNOT\b', flags=re.I | re.X)
>>> r.findall(s)
['and', 'and', 'not', 'or']
Debuggex Demo
당신이 그들을 캡처하거나 단지 그들이 있다는 것을 감지 하시겠습니까? – Cfreak
존재 여부를 확인하기 만하면 'in'을 사용하십시오. 예를 들어, [0123]에 대한 단어는 [오렌지, 사과, 배,하지만 파인애플이나 ..]가 아닙니다. [True, True, True] ' – linuxfan
@ Cfreak 그들을 캡처하십시오. – JudyJiang