2011-12-05 3 views
8

파이썬에서 하이픈 처리 된 단어와 일치하는 정규식을 찾고 있습니다.하이픈 처리 된 단어에 대한 파이썬 정규식

내가 얻을 관리했습니다 가장 가까운입니다 : '\의 w + - \ + w [- + w] *'

text = "one-hundered-and-three- some text foo-bar some--text" 
hyphenated = re.findall(r'\w+-\w+[-\w+]*',text) 

목록을 반환 [ '한 hundered -와 - 3 ~', 'foo는 -바'].

'three'다음에 오는 하이픈을 제외하고는 거의 완벽합니다. 그 다음에 '단어'가 오면 추가 하이픈 만 필요합니다. 즉 '[- \ w +] *'대신 '(- \ w +) *'와 같은 것이 필요하지만 작동하지 않을 것입니다. ('-three,' ')를 반환합니다. 즉, | 단어 뒤에 하이픈과 그 뒤에 단어가오고 그 뒤에 하이픈 _ 단어가 0 번 이상 나오는 단어가 일치합니다.

+1

난 당신이 사용하려는 모르겠어요,하지만 당신은 후행 또는 접두어 하이픈이 경우 고려했다 [유효합니다 (http://en.wikipedia.org/wiki/Hyphen) , "19 세기와 20 세기"또는 "투자자가 소유하고 운영하는"기업처럼? –

+1

당신 자신의 표현에서 주요 문제는 대괄호입니다. 그들은 콘텐츠를 그룹화하지 않으며, 완전히 다른 문자 클래스를 만듭니다. – stema

+0

감사합니다. lazyr. 나는 당신이 지적한 사례들을 고려해 보았고 문제를 일으키지 않을 것입니다. 설명해 주셔서 감사합니다. 대괄호는 내용을 그룹화하지 않았 음을 알았지 만, 내가 시도한 것에 가장 가깝게 일치했습니다. – Sixhobbits

답변

18

이 시도 : 여기

re.findall(r'\w+(?:-\w+)+',text) 

우리가 할 하이픈 단어를 생각해

  • 는 임의의 수의 뒤에 단어 문자의 번호 :
    • 단일 하이픈
    • 다음에 단어 012