2016-03-11 2 views
6

Ich weiß, dass _ nicht durch \W zugeordnet werden kann, während jede andere Interpunktion kann. Wie das Dokument lautet: \w ist eine Reihe von alphanumerischen Zeichen und die Unterstrich.Warum kann der Unterstrich in Python nicht mit W abgeglichen werden?

Zur gleichen Zeit:

enter image description here

Ich habe immer von diesem verwechselt worden, aber nie wirklich, warum die Frage belästigt.

Hat es mit der speziellen Rolle zu tun, die _ in Python spielt?

+0

'_' hat keine besondere Rolle in Python außerhalb der REPL, also bezweifle ich, dass dies der Grund ist. –

+0

Perl Regexp wirkt in der gleichen Weise, so bezweifle ich, es ist eine besondere Sache in Python – Vorsprung

+0

Ja, das ist nicht einzigartig für Python - siehe z. https://msdn.microsoft.com/en-us/library/ae5bf541(v=vs.90).aspx für die .NET-Syntax, zum Beispiel. – jonrsharpe

Antwort

4

Viele Pythons Regular Expression Syntax im Modul re stammt von Perl, die influenced by sed and awk war. Die \w kommt von dort und hat eine lange Geschichte.


Im ursprünglichen regex Modul (die in Python 1.5 veraltet wurde), \w tat nicht_ umfassen, wie offensichtlich ist aus Python 1.4 documentation:

\w

Streichhölzer alphanumerisches Zeichen; Dies entspricht dem Satz [a-zA-Z0-9].


P. S. Obwohl es nicht sehr praktisch ist, können alle nicht \w + _ mit einer Zeichenklasse [\W_] übereinstimmen.

+0

Inconvenient, ja. Ich denke auch, dass dies nur widersprüchlich ist und Verwirrung stiftet. – minerals

+1

Eine lustige Tatsache: '% w' in Lua-Mustern stimmt nicht mit' _' überein, es passt nur zu alphanumerischen Symbolen. –

+1

Es musste natürlich nicht mit sed/awk kompatibel sein –

Verwandte Themen