2016-07-11 9 views
2

Ich möchte einen regulären Ausdruck verwenden, um nach Hunden oder Hunden in einem bestimmten Satz zu suchen. Hier ist, was ich habe, aber es funktioniert nicht. Ich brauche es, um nach dem bestimmten Wort zu suchen, nicht nur nach einem Plural oder einer Einzahl aller Wörter.Regulärer Ausdruck für die Suche nach Plural oder Singular von bestimmten Python

x = re.findall('(?<=\|)dog[s]?(?=\|)', txt) 
+2

Versuchen Sie 'x = re.findall (r '\ bdogs? \ B', txt)' –

+0

Keine Notwendigkeit, ein einzelnes Zeichen in einer Klasse zu setzen - 'Hunde?' Ist ganz gut. – Jan

+0

Oh wow, also die? Wird nur das letzte Zeichen verwendet? Aus irgendeinem Grund dachte ich, dass es das ganze Wort verwenden würde lol Danke –

Antwort

2

Ein Quantifizierer wird auf das Atom auf der linken Seite angewendet. Wenn es sich um eine Gruppe handelt, wird sie auf eine Gruppe angewendet. Wenn es ein Literalsymbol ist, wird es auf dieses Symbol angewendet.

So, s? entspricht 1 oder 0 s.

Verwenden

x = re.findall(r'\bdogs?\b', txt) 

wo \b Wortgrenzen sind, und s ist optional.

Hinweis: Die Verwendung von Raw-String-Literalen zur Definition von Regex-Mustern wird bevorzugt, um Probleme im Zusammenhang mit dem Austreten spezieller Regex-Metazeichen zu vermeiden.

+0

Sie können hinzufügen, dass das '?' Standardmäßig gierig ist. – Jan

+0

Obwohl technisch Jan mein Problem behoben. Ich dachte, dass es die gesamte Einheit gruppieren würde, nicht nur die letzte Einheit. Vielen Dank für Ihre Hilfe, obwohl –

+1

@ Jan: Die gierige '?' (Eins oder Null) und faul '??' (null oder eins) funktioniert hier genauso, da das Muster an der nachlaufenden Wortgrenze verankert ist. Siehe ['\ bdogs? \ B'] (https://regex101.com/r/wD3dB5/1) und [' \ bdogs ?? \ b'] (https://regex101.com/r/wD3dB5/2). –

Verwandte Themen