2016-03-11 4 views
6

So che _ non può essere corrisposto da \W mentre è possibile qualsiasi altra punteggiatura. Come indicato dai documenti: \w è un set di caratteri alfanumerici e il numero di riferimento .Perché la sottolineatura non può essere abbinata a " W" in Python?

Allo stesso tempo:

enter image description here

Sono sempre stato confuso da questo, ma in realtà mai preso la briga di chiedersi perché.

Ha a che fare con il ruolo speciale che _ gioca in Python?

+0

'_' non ha alcun ruolo speciale in Python al di fuori del REPL, quindi dubito che questo sia il motivo. –

+0

perl regexp funziona allo stesso modo quindi dubito che sia una cosa speciale in Python – Vorsprung

+0

Sì, questo non è univoco per Python - si veda ad es. https://msdn.microsoft.com/en-us/library/ae5bf541(v=vs.90).aspx per la sintassi .NET, ad esempio. – jonrsharpe

risposta

4

Un sacco di sintassi di espressioni regolari di Python nel modulo re proviene da Perl, che era influenced by sed and awk. Il \w proviene da lì e ha una lunga storia.


Nel modulo originale regex (che è stata sconsigliata in Python 1.5), \w fatto non comprendono _, come è evidente da Python 1.4 documentation:

\w

Corrisponde a qualsiasi carattere alfanumerico; questo è equivalente al set [a-zA-Z0-9].


P.S. Anche se non è molto conveniente, può corrispondere a tutti i numeri non \w + _ con una classe di caratteri [\W_].

+0

Scomodo, sì. Penso anche che questo sia solo incoerente e genera confusione. – minerals

+1

Un fatto divertente: '% w' nei modelli Lua non corrisponde a' _', si abbina solo ai simboli alfanumerici. –

+1

Ovviamente non doveva essere compatibile con sed/awk –

Problemi correlati