2011-12-05 30 views
8

Python'da tireli sözcüklerle eşleştirmek için bir regex arıyorum.Tireli sözcükler için Python Regex

I başardı en yakın olmasıdır: '\ w + - \ w + [- w +] *'

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

listesini verir [ 'tek hundered-ve-üç', 'foo -bar'].

Bu 'üç' sonra izleyen tire dışında neredeyse mükemmel. Sadece 'tire' ile devam ederse ek tire istiyorum. yani '[- \ w +] *' yerine, '(- \ w +) *' gibi bir işe ihtiyacım var, ama işe yaramadı, ama (('-three,' '] döndürür). yani, kelimeyle eşleşen bir kelime ve ardından tire, ardından hyphen_word sıfır veya daha fazla kez |.

+1

ki sen bu kullanmayı planlıyor bilmiyorum ama bir eğik ya da öneki tire olan davaları kabul var [geçerli] (http://en.wikipedia.org/wiki/Hyphen) "on dokuzuncu ve yirminci yüzyıl" ya da "yatırımcıya ait ve işlenmiş" gibi mi? –

+1

Kendi ifadenizdeki temel sorun köşeli ayraçlardır. İçeriği birlikte gruplandırmazlar, karakter sınıfı oluştururlar, bu tamamen farklı bir şeydir. – stema

+0

Giriş için teşekkürler, tembel. İşaret ettiğin vakaları düşündüm ve bir sorun teşkil etmeyecekler. Açıklama için teşekkürler, stema. Köşeli parantezlerin içeriği gruplamadığını fark ettim, ancak yapmaya çalıştığım şeyin en yakın eşleşmesiyle sonuçlandı. – Sixhobbits

cevap

18

bu deneyin: İşte

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

biz olmak tireli bir sözcüğü ele alalım:

  • herhangi bir sayıda ardından sözcük karakter bir dizi:
    • tek tire
    • ve arkasından gelen sözcükler: charge