2013-01-23 2 views
1

J'ai quelques missunderstanding avec le codage regexp:simplejson - codant regexp d +

>>> simplejson.dumps({'title':r'\d+'}) 
'{"title": "\\\\d+"}' 
>>> simplejson.loads('{"title": "\\\\d+"}') 
{u'title': u'\\d+'} 
>>> print simplejson.loads('{"title": "\\\\d+"}')['title'] 
\d+ 

Alors, sans utiliser print je vois \\, avec l'aide print je vois \. Donc, ce que la valeur chargée dict contient - avec \\ ou avec \?

+2

'r''' est un littéral chaîne brute, et non une expression régulière. Ces littéraux sont utiles et utiles lors de la création d'une expression régulière, mais ils constituent un concept distinct. –

Répondre

1

Voici une astuce: Utilisez list pour voir ce que les personnages sont vraiment dans la chaîne:

In [3]: list(u'\\d+') 
Out[3]: [u'\\', u'd', u'+'] 

list décompose la chaîne en caractères individuels. Donc u'\\' est un caractère. (Le double antislash dans u'\\' est un escape sequence.) Il représente un caractère barre oblique inverse. Ceci est correct puisque r'\d+' a aussi une seule barre oblique inverse:

In [4]: list(r'\d+') 
Out[4]: ['\\', 'd', '+']