2013-03-22 13 views
5

Chcę poszukać frazy, dopasować do kilku słów za nią, ale przestań wcześniej, jeśli znajdę inną konkretną frazę.Wyrażenia regularne: Dopasuj do słowa lub maksymalnej liczby słów

Na przykład chcę dopasować do trzech słów po "przejściu do", ale zatrzymaj proces dopasowywania, jeśli napotkam "spróbować". Na przykład "pójście do parku luna" spowoduje "park luna"; "wyjazd do stolicy Peru" spowoduje, że "stolica" i "pójście na księżyc, by spróbować sernika" spowoduje "księżyc".

Czy można to zrobić za pomocą pojedynczego, prostego wyrażenia regularnego (najlepiej w języku Python)? Wypróbowałem wszystkie kombinacje, które mogłem wymyślić, ale zawiodłem żałośnie :).

+2

proszę pokazać nam swoje najbardziej udana próba. – NPE

+0

Dla zabawy jest tutaj rozwiązanie bez regex: ''' .join (text.split ('going to the') [1] .split ('to try') [0] .split() [: 3]) ' – jamylak

Odpowiedz

5

Ten pasuje do 3 ({1,3}) słowach następujących going to the tak długo jak nie są one następnie spróbować ((?!to try)):

import re 
infile = open("input", "r") 
for line in infile: 
    m = re.match("going to the ((?:\w+\s*(?!to try)){1,3})", line) 
    if m: 
     print m.group(1).rstrip() 

wyjściowe

luna park 
capital city of 
moon 
+0

Zmień to, aby przejść do – jamylak

+0

Dlaczego to działa z "udaniem się na piękny wielki księżyc, aby spróbować sernika" i powrotu "piękny wielki księżyc"? Spodziewałem się, że "księżyc" się nie zgadza, ponieważ po nim następuje "wypróbować" ... – EOL

+2

@EOL Rozważ "udanie się na księżyc, aby spróbować ...": "" księżyc "' następuje po "próba" i zawiedzie wcześniejszy. Silnik wycofuje jedną spację, a następnie pasuje. Teraz następna postać to spacja i nie pasuje do '\ w', więc nie dostajesz drugiego słowa. –

-2

Myślę, że szukasz sposobu na wyodrębnienie właściwych rzeczowników ze zdań. Powinieneś spojrzeć na NLTK, aby uzyskać właściwe podejście. Regex może być pomocny jedynie w ograniczonym gramatyce kontekstowej. Z drugiej strony wydajesz się pytać o umiejętność parsowania ludzkiego języka, który nie jest trywialny (dla komputerów).

+1

to nie jest pytanie, – jamylak

+2

Jeśli cokolwiek, może być lepiej dostosowane jako komentarz. – Dukeling

Powiązane problemy