2011-12-05 16 views
8

Poszukuję wyrażeń regularnych dopasowujących słowa dzielone w python.Python Regex dla dzielonych słów

Najbliżej udało mi się dostać to: '\ w + - \ w + [- W +] *'

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

która zwraca listę [ 'jedna hundered-i-trzy-', „foo -bar'].

Jest to prawie idealne, z wyjątkiem kończącego łącznika po wyrazie "trzy". Chcę tylko dodatkowy łącznik, jeśli po nim następuje "słowo". tj. zamiast "[- \ w +] *" potrzebuję czegoś takiego jak "(- \ w +) *", które moim zdaniem zadziałałoby, ale nie działa (zwraca ['-trój,' ']). tzn. coś, co pasuje do słowa, po którym następuje myślnik, a następnie słowo, po którym następuje hyphen_word zero lub więcej razy |.

+1

Nie wiem, do czego ma to służyć, ale czy wzięto pod uwagę przypadki, w których końcowy lub prefiksowany łącznik jest ważny (http://pl.wikipedia.org/wiki/Hyphen) , jak "XIX i XX wieku" lub "właścicielem i właścicielem inwestycji"? –

+1

Głównym problemem we własnym wyrażeniu są nawiasy kwadratowe. Nie grupują treści razem, tworzą klasę postaci, to coś zupełnie innego. – stema

+0

Dzięki za wejście, lazyr. Rozważałem przypadki, na które zwracasz uwagę, i nie stanowią problemu. Dzięki za wyjaśnienie, stema. Zauważyłem, że nawiasy kwadratowe nie grupują treści, ale w rezultacie są najbliżej tego, co próbowałem zrobić. – Sixhobbits

Odpowiedz

18

Spróbuj tego:

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

Tutaj rozważamy dzielone słowo się:

  • wiele słownych znaków
  • następnie dowolną liczbę:
    • pojedynczy myślnik
    • , po którym następuje słowo chars