2010-01-03 2 views
4

이것은 쉽고이 정규식은 특정 문자로 시작하는 단어를 검색 할 때 잘 작동하지만 해시와 물음표와 일치하도록 가져올 수는 없습니다.파이썬 정규식을 사용하여 해시 및 물음표로 시작하는 단어를 일치시키는 방법?

r = re.compile(r"\b([a])(\w+)\b") 

을하지만이 일치하지 않습니다 :

이 작품과 일치

단어는 시작 이 시도 :

r = re.compile(r"\b([#?])(\w+)\b") 
r = re.compile(r"\b([\#\?])(\w+)\b") 
r = re.compile(r"([#\?][\w]+)?") 

시도조차 단지 일치하는 해시 기대

r = re.compile(r"([#][\w]+)?" 
r = re.compile(r"([/#][\w]+)?" 

text = "this is one #tag and this is ?another tag" 
items = r.findall(text) 

로를 얻으세요 :

[('#', 'tag'), ('?', 'another')] 

답변

6

\b\w\W (또는 \W 사이 \w) 사이의 빈 공간을 일치하지만 # 또는 ? 사전이 더 \b이 없습니다.

즉, 첫 번째 단어 경계를 제거하십시오.

하지 :

r = re.compile(r"\b([#?])(\w+)\b") 

하지만

r = re.compile(r"([#?])(\w+)\b") 
+0

바트 K.을 마음에 올 것입니다! 많은 감사합니다. – PhoebeB

+0

문제가 없습니다. –

+1

당신이 준 RE는'# this와 비슷한 것 '과 일치합니다. – iamamac

1

# 또는 ? 대신 (?:^|\s)을 사용하기 전에 첫 번째 \b가 일치하지 않습니다.

또한 \w+은 탐욕적인 일치이기 때문에 마지막에 \b이 필요하지 않습니다. 또한 내 혼란을 더 추가 내 코드에서 추가 버그가 있었다 발견 - 파이썬을 사용하는

r = re.compile(r"(?:^|\s)([#?])(\w+)") 

text = "#head this is one #tag and this is ?another tag, but not this?one" 
print r.findall(text) 
# Output: [('#', 'head'), ('#', 'tag'), ('?', 'another')] 
+1

타입을 만지는 것을 배우는 것 - 정규 표현식 전문가가되기위한 노력을하는 것이 장기적으로 노력할 가치가 있습니다! 공헌 해 주셔서 감사합니다. – PhoebeB

2

은 정규식은 마지막 작동

>>> text = "this is one #tag and this is ?another tag" 
>>> for word in text.split(): 
... if word.startswith("#") or word.startswith("?"): 
...  print word 
... 
#tag 
?another 
+0

본인의 코드가 원래 질문에 대한 답변임을 이해합니다. 그런데 왜 정규 표현식이 파이썬이 아닌 것 같습니까? 나는 항상 그들을 사용한다. – jdferreira

관련 문제