@
으로 시작하고 ;
, .
, :
또는
으로 끝나는 단어는 어떻게 일치합니까?@user와 정규 표현식을 일치 시키려면
단어는 영숫자를 가질 수 있으며 밑줄로 구성 될 수 있습니다.
나는 하나의 단어 문장만으로 작동하는 것처럼 보이는 ^@([a-zA-Z0-9_])*[:;, ]$
을 생각해 냈습니다.
@
으로 시작하고 ;
, .
, :
또는
으로 끝나는 단어는 어떻게 일치합니까?@user와 정규 표현식을 일치 시키려면
단어는 영숫자를 가질 수 있으며 밑줄로 구성 될 수 있습니다.
나는 하나의 단어 문장만으로 작동하는 것처럼 보이는 ^@([a-zA-Z0-9_])*[:;, ]$
을 생각해 냈습니다.
^
에 [:;, ]
을 수정하는 것은 당신이 그들을 제거 할 필요가 있으므로, (멀티 라인 모드 또는 라인 등) 문자열의 시작과 일치 :
>>> import re
>>> sentence = "foo bar @match don't match @success;"
>>> re.findall('@([a-zA-Z0-9_])*[:;, ]', sentence)
['h', 's']
한정자 (*
)가 캡처와 일치하는 대괄호 밖에 있으므로 마지막 문자 만 캡처합니다. 내부를 이동하고 당신이 얻을 :
>>> re.findall('@([a-zA-Z0-9_]*)[:;, ]', sentence)
['match', 'success']
당신이 너무 @ 및 후행 문자를 캡처 할 경우, 단지뿐만 아니라 괄호 내부로 이동 :
>>> re.findall('(@[a-zA-Z0-9_]*[:;, ])', sentence)
['@match ', '@success;']
을 그리고에 코멘트에 언급 한 바와 같이 ,
>>> sentence = "foo bar @match don't match @somereallylongnamehere @success;"
>>> re.findall('(@[a-zA-Z0-9_]{1,15}[:;, ])', sentence)
['@match ', '@success;']
(물론, 길이 제한이 이전 표현 중 하나에 추가 할 수 있습니다뿐만 아니라 일 : 질문, 당신은 또는 문자의 특정 숫자로 제한하지 않을 수있다 마지막 하나입니다.)
아! 이제 캡쳐 그룹 밖에 * 놓습니다. 감사! –
앵커 ^
및 $
을 제거하면 도움이 될 것입니다.
"Example @ nothing"
의 빈 문자열과 일치시키지 않으려면 *
대신 "1 개 이상의 한정자"+
을 지정할 수 있습니다. 1-15 자에게 자명 제한 즉 @([a-zA-Z0-9_]+)[:;, ]
, 즉 @([a-zA-Z0-9_]{1,15})[:;, ]
{1,15}
*
로 대체함으로써 수행 될 수있다.
@ 기호와 끝 문자를 결과로 사용하려면 @[a-zA-Z0-9_]{1,15}[:;, ]
이면 충분합니다.
만 이름을 캡처하려는 경우, 당신은이 @([a-zA-Z0-9_]{1,15})[:;, ]
경우 토큰이 바로 문자열의 끝에서와 특수 문자없이 사용할 수 있으며, 당신이 그것을 캡처하려면, 당신은 할 수 있습니다 $
이 말과 일치하면서 (?:[:;, ]|$)
우리가 얘기하는 트위터이므로 15 자 (사용자 이름 최대 길이)로 제한하려고합니다. –