2016-08-09 4 views
1

트윗 본문 내의 모든 트위터 핸들을 캡처하기 위해 정규 표현식을 사용하려고합니다. 문제는 내가 얻으려고 노력 파이썬에서 정규식이 트위터 핸들과 일치하도록

  1. 는 특정 문자열을 알 수없는 길이의
  2. 있습니다 비 포함

  3. 공백 중 하나
    • 문장 다음에 될 수 있음을 처리하고있어 것입니다
    • 또는 문자열의 끝.

예를 들어, 이러한 문자열의 각각에 대해, 필자는 내가 돌아 싶은 것을 이탤릭체에 을 표시했다.

"@handle 무엇이 문제입니까?" [RETURN '@handle']

"무엇이 @handle입니까?" [RETURN '@handle']

"@ 123handle 문제는 @ handle123입니까?" [RETURN '@ 123handle', '@의 handle123'] 이것은 내가 지금까지 무엇을 가지고

:

>>> import re 
>>> re.findall(r'(@.*handle.*?)\W','hi @123handle, hello @handle123') 
['@123handle'] 
# This misses the handles that are followed by end-of-string 

내가 수정 시도가 허용하는 or 문자를 포함하는 끝을 문자열 캐릭터. 대신 전체 문자열을 반환합니다.

>>> re.findall(r'(@.*handle.*?)(?=\W|$)','hi @123handle, hello @handle123') 
['@123handle, hello @handle123'] 
# This looks like it is too greedy and ends up returning too much 

두 조건을 모두 만족시키는 표현식을 작성하려면 어떻게해야합니까?

나는 coupleother 장소를 보았지만 여전히 문제가 있습니다.

+0

'@ '와'handle' 사이에'. *'를 추가하면 안됩니다. '\ w *'를 사용하십시오. 'r '@ w * handle \ w *'와 비슷하다. –

답변

2

@으로 시작하는 문자열을 찾은 다음 0 개 이상의 문자를 입력하고 handle을 입력 한 다음 다시 0 개 이상의 문자를 입력하는 것으로 보입니다. -

사용

r'@\w*handle\w*' 

또는 이메일에 @ + 단어 문자와 일치 피하기 위해 :

r'\[email protected]\w*handle\w*' 

Regex 1 demoRegex 2 demo합니다 (\B 비 단어 경계를 참조 비 단어 문자가 필요합니다 또는 문자열의 시작은 @ 바로 앞에 올 것임).

.*은 개행 문자 이외의 모든 문자를 최대한 일치시키는 욕심이 일치하는 패턴입니다. \w*은 0+ 문자 (가능한 한 많이)와 일치하지만 re.UNICODE 플래그가 사용되지 않는 경우 (사용자 코드에서 사용되지 않은 경우) [a-zA-Z0-9_] 세트와 일치합니다.

Python demo : 만

import re 
p = re.compile(r'@\w*handle\w*') 
test_str = "@handle what is your problem?\nwhat is your problem @handle?\[email protected] what is your problem @handle123?\n" 
print(p.findall(test_str)) 
# => ['@handle', '@handle', '@123handle', '@handle123'] 
0

일치하는 문자의 범위에 포함 핸들 ->/[a-zA-Z0-9_]/합니다.

s = "@123handle what is your problem @handle123?" 
print re.findall(r'\B(@[\w\d_]+)', s) 
>>> ['@123handle', '@handle123'] 
s = '@The quick brown [email protected] over the LAAZY @_dog.' 
>>> ['@The', '@_dog'] 
+0

이것은 또한 "[email protected]"에서'@'를 추출 할 것이다. –

+0

내 게시물을 지금 업데이트 중입니다. – ospahiu

관련 문제