Sie suchen einen regulären Ausdruck mit alphanumerischen + „&“ und „;“
Frage
Hier ist das Problem:
split=re.compile('\\W*')
Dieser reguläre Ausdruck funktioniert gut, wenn mit regelmäßigen Worten zu tun, aber es gibt Gelegenheiten, bei denen ich den Ausdruck brauchen Worte wie käyttäj&aml;auml;
aufzunehmen.
Was soll ich auf die regex fügen Sie die &
und ;
Zeichen enthalten?
Lösung
Sie wollen wahrscheinlich das Problem umgekehrt nehmen, das heißt alle Zeichen ohne Leerzeichen zu finden:
[^ \t\n]*
Oder Sie wollen die zusätzlichen Zeichen hinzuzufügen:
[a-zA-Z0-9&;]*
Falls Sie HTML-Entitäten passen, sollten Sie versuchen, so etwas wie:
(\w+|&\w+;)*
Andere Tipps
Ich würde die Entitäten als Einheit behandeln (da sie auch numerischen Zeichencodes enthalten kann), in dem folgenden regulären Ausdruck resultierende:
(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+
Das paßt
- entweder ein Wortzeichen (einschließlich „
_
“) oder - eine HTML-Einheit, bestehend aus
- das Zeichen „
&
“,- das Zeichen „
#
“,- das Zeichen „
x
“, gefolgt von mindestens einer hexadezimalen Ziffer oder - mindestens eine Dezimalstelle oder
- das Zeichen „
- mindestens ein Buchstabe (= benannte Einheit),
- das Zeichen „
- ein Semikolon
- das Zeichen „
- mindestens einmal.
/ EDIT:. Dank ΤΖΩΤΖΙΟΥ für einen Fehler Hinweis auf
Sie sollten eine Zeichenklasse machen, die die zusätzlichen Zeichen umfassen würde. Zum Beispiel:
split=re.compile('[\w&;]+')
Dies sollte den Trick tun. Zu Ihrer Information
-
\w
(Kleinbuchstaben 'w') übereinstimmt Wortzeichen (alphanumerische) -
\W
(Kapital W) ist eine negierte Zeichenklasse (dh, es stimmt mit einem nicht-alphanumerischen Zeichen) -
*
entspricht 0 oder mehrmals und+
passt ein oder mehrere Male, so wird*
nichts gefunden (auch wenn es keine Zeichen gibt es).
Sieht aus wie dies der Trick:
Split = re.compile ( '(\\ W + & \\ W +;) *')
Danke für die Vorschläge. Die meisten von ihnen funktionierte gut auf Reggy, aber ich verstehe nicht ganz, warum sie mit re.compile fehlgeschlagen.