2016-06-28 5 views
-1

Ich habe eine Reihe von Phrasen, die ich in einem Stück Text überprüfen.Passende Platzhalter in Python

Ein einfacher Ausdruck der Form ‚so bald wie möglich‘ ist leicht zu überprüfen, etwa so:

if phrase in text: 
    ... 

ich auch Sätze der Form habe ‚eine {JJ} Menge‘, wo JJ ist ein Platzhalter für jedes Adjektiv. Also, wenn der Text etwas wie 'eine kleine Menge von' enthält, dann ist die Phrase 'eine {JJ} Menge von' vorhanden.

Wie passe ich Muster dieses Formulars an?

+0

Ein regulärer Ausdruck, vielleicht? 'r'a \ w + Menge von''? –

+0

Danke, aber ich bin mir nicht sicher, ob das geht. Ich habe Hunderte von Phrasen mit ähnlichen Platzhaltern, und ich suche nach einer unspezifischen Art, mit ihnen umzugehen. – user3886558

+0

Soll bestimmt werden, ob ein Wort ein Adjektiv ist? Weil das ein schwierigeres Problem ist. – Natecat

Antwort

0

Sie können reguläre Ausdrücke verwenden. In Ihrem Beispiel können Sie beispielsweise Folgendes tun:

re.findall(r"a\s\w+?\samount of", text) 

Dies gibt alle Instanzen der in Ihrem Beispiel angegebenen Phrase zurück. \s\w+?\s passt ein einzelnes Wort, so dass Sie einfach die Wörter um das ändern können, wenn Sie das Muster ändern müssen. Sie können das Muster aus Ihrer Phrase Gliederung finden, indem Sie einfach so etwas tun wie phrase.replace("{JJ}", r"\s\w+?\s")

+0

Meinst du nicht '\ b' anstatt' \ s'? Letzteres passt auf Leerzeichen, nicht auf Wortgrenzen. –

+0

@DanielRoseman Nein, '\ b' macht hier keinen Sinn. Zum Beispiel würde ich nicht "eine kleine Menge." Der Raum ist wirklich das einzige, was in diesem Zusammenhang als Wortgrenze sinnvoll ist. – Natecat

+0

Aber dieser Ausdruck passt nicht "eine kleine Menge von", weil Sie jetzt zwei Leerzeichen erwarten. Und '\ w' passt sowieso nur zu alphanumerischen Zeichen, also passt das". "Nicht zusammen. –