2016-09-23 2 views

Répondre

2

Vous avez égaré des guillemets simples et vous devez utiliser \d+ au lieu de simplement \d:

>>> s = "u'id': u'2'" 
>>> re.findall(r"u'id'\s*:\s*u'\d+'", s) 
["u'id': u'2'"] 
+0

Super! Merci pour l'aide rapide - Puis-je demander ce que le '*' et le '\ s' font? – ThatOnePythonNoob

+0

'\ s *' correspond à 0 ou plusieurs espaces. Des guillemets doubles ou des guillemets simples autour de la regex sont nécessaires car regex est de type chaîne. Ici, puisque guillemet simple fait partie de la regex elle-même, nous devons utiliser un guillemet double pour la constante de chaîne regex. – anubhava

2

Cette expression rationnelle correspond à vos habitudes:

u'id': u'(\d+)'

Les bits importants du regex ici sont:

  • les supports () qui rend un groupe de capture (vous pouvez donc obtenir les informations
  • le marqueur de chiffre \d qui spécifie un chiffre 0 - 9
  • le marqueur multiple + qui signifie "au moins 1"

testé sur les modèles suivants:

u'id': u'3' 
u'id': u'20' 
u'id': u'250' 
u'id': u'6132838' 
1

Essayez ceci:

str1 = "u'id ': u'x'"

re.findall (r'u \ 'id \': u \ '\ d + \' 'str1)

Vous devez échapper les guillemets simples (') parce qu'il est un caractère spécial

+0

Pourquoi échapper des guillemets simples lorsque vous pouvez utiliser des guillemets doubles? Et ne redéfinissez jamais les identifiants intégrés comme 'str'. – Wombatz

+0

@Wombatz désolé j'ai un nom de chaîne d'édition mais c'est une bonne pratique pour échapper un guillemet simple (') car il doit être échappé si nous utilisons r' 'au lieu de r " –

+0

Si vous utilisez' r "" 'don Il ne faut rien échapper. – Wombatz