2013-04-07 6 views
15

나는 아래의 시나리오에 대한 올바른 정규 표현식을 찾는 데 문제 :파이썬 정규식 일치 전체 단어

말할 수 있습니다 :

a = "this is a sample" 

내가 전체 단어를 일치시킬 - 예를 들어 경기 "hi"해야 "hi"은 단어가 아니므로 "is"은 왼쪽과 오른쪽에 알파 문자가 없으므로 True를 반환해야하므로 False를 반환합니다.

+0

잘못된 게시물과 중복 된 내용으로 폐쇄되었으므로이 질문을 다시 열었습니다. –

답변

23

the docs에서

re.search(r'\bis\b', your_string) 

보십시오 : B \

가 공백이있는 경우, 만 단어의 시작 또는 끝에서. re 모듈이로 "단어"의 순진한 정의를 사용하여 "숫자의 순서 또는 문자 밑줄" "문자 및 숫자"로케일 또는 유니 코드 옵션에 따라 달라집니다 것을

참고.

+2

감사합니다. 플래그 = re.IGNORECASE를 추가했습니다. – user2161049

+1

word = "test!"에 대해 작동하지 않았습니다. ! 그것을 깨뜨린다. – user2161049

+0

무엇이 ** r **이 문장에서 필요합니다 - re.search (** r ** '\ bis \ b', your_string)? – swordholder

-4

정규 표현식의 문제는 다른 문자열에서 검색하고자하는 문자열에 정규식 문자가 있으면 복잡해집니다. 괄호가있는 문자열은 실패합니다.

이 코드는

word="is" 
    srchedStr="this is a sample" 
    if srchedStr.find(" "+word+" ") >=0 or \ 
     srchedStr.endswith(" "+word): 
     <do stuff> 

각 측면에 공간과 두 번째 부분과 텍스트의 조건 검색의 첫 번째 부분 문자열 상황의 끝을 잡는다 단어를 찾을 수 있습니다. re.search()의 문서에서

>>> x="this is a sample" 
>>> y="this isis a sample." 
>>> regex=re.compile(r"\bis\b") # For ignore case: re.compile(r"\bis\b", re.IGNORECASE) 
>>> regex.findall(y) 
[] 
>>> regex.findall(x) 
['is'] 

다음 find

+2

이 내용을 읽기가 어렵습니다. 편집하십시오. – davejagoda

+1

또한 이미 승인 된 답변이 있음을 알 수 있습니다. 응답을 삭제하고 다운 폰트로 인해 평판을 회복하고 싶을 수 있습니다. – davejagoda

+0

@davejagoda가 답을 삭제하면 평판이 회복됩니까? –

1

정규식이 사용하는 단어 경계를 시도하는 정수를 반환하는 반면 ENDWITH 부울 있음을 유의하십시오.

It matches the empty string, but only at the beginning or end of a word 

E.g. r'\bfoo\b' matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or 'foo3' 

희망 하시겠습니까?