2009-11-04 5 views
8

Mit Python-Modul re, wie erhalten Sie das Äquivalent des "\ w" (das alphanumerische Zeichen entspricht) OHNE die numerischen Zeichen (die mit "[0-9]" übereinstimmen)?Wie werden alphabetische Zeichen ohne numerische Zeichen mit Python regexp abgeglichen?

Beachten Sie, dass die grundlegende Notwendigkeit besteht, jedes Zeichen (einschließlich aller Unicode-Varianten) ohne numerische Zeichen (die mit "[0-9]" übereinstimmen) zu finden.

Als letzte Anmerkung, ich brauche wirklich eine Regexp, da es Teil einer größeren Regexp ist.

Unterstriche sollten nicht übereinstimmen.

EDIT:

  • ich Zustand unterstreicht nicht gedacht hatte, so vielen Dank für Warnungen über diese durch „\ w“ und für die gewählte Lösung, die dieses Problem behebt angepasst wird.

Antwort

24

Sie [^\W\d] wollen: die Gruppe von Zeichen das ist nicht (entweder eine Ziffer oder keine alphanumerische). Fügen Sie in diesem negierten Satz einen Unterstrich hinzu, wenn Sie sie auch nicht möchten.

Ein bisschen verdreht, wenn Sie mich fragen, aber es funktioniert. Sollte schneller sein als die Lookahead-Alternative.

+0

Nett, +1 von mir. Ich habe nicht daran gedacht. – Tomalak

+0

großartige Idee, die mit anderen Mustern und anderen Regex-Implementierung wiederverwendet werden kann. – vaab

5
(?!\d)\w 

Eine Position, die nicht von einer Ziffer folgt, und dann \w. Löscht effektiv die Ziffern, erlaubt aber den Bereich \w mit einem negativen Look-Ahead.

Das gleiche könnte als positiven Vorgriff und \D ausgedrückt werden:

(?=\D)\w 

Um mehr von diesen zu entsprechen, in Pars einschließen:

(?:(?!\d)\w)+ 
+3

Vergessen Sie nicht, dass \ w auch den Unterstrich enthält. –

+0

Das OP hat nichts über den Unterstrich gesagt. Wie ist das relevant? – Tomalak

+1

Nur für den Fall, dass das OP es nicht erwartet. Ich mag deine Lösung. –

Verwandte Themen