J'ai du mal à comprendre les expressions régulières Python pour créer une expression régulière permettant d'extraire des valeurs spécifiques.
La page que j'essaie d'analyser contient un certain nombre de productIds qui apparaissent dans le format suivant.
\"productId\":\"111111\"
J'ai besoin d'extraire toutes les valeurs, 111111
dans ce cas.
t = "\"productId\":\"111111\""
m = re.match("\W*productId[^:]*:\D*(\d+)", t)
if m:
print m.group(1)
signifiant correspond à des caractères non-Word (\W*
), puis à productId
suivi de caractères autres que des colonnes ([^:]*
) et d'un :
. Faites ensuite correspondre les non-chiffres (\D*
), puis faites correspondre et capturez les chiffres suivants ((\d+)
).
Sortie
111111
quelque chose comme ça:
In [13]: s=r'\"productId\":\"111111\"'
In [14]: print s
\"productId\":\"111111\"
In [15]: import re
In [16]: re.findall(r'\d+', s)
Out[16]: ['111111']
Les barres obliques inverses ici pourraient ajouter à la confusion, car elles sont utilisées comme caractère d'échappement à la fois par les chaînes Python (non brutes) et par la syntaxe regexp.
Ceci extrait les identifiants de produit du format que vous avez posté:
re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"')
La chaîne brute r'...'
supprime un niveau de barre oblique inversée; l'utilisation d'un guillemet simple comme séparateur de chaîne supprime le besoin d'échapper aux guillemets doubles; et finalement les backslashe sont doublés (une seule fois) en raison de leur signification particulière dans le langage des expressions rationnelles.
Vous pouvez utiliser la méthode findall()
de l'objet regexp pour trouver toutes les correspondances dans du texte:
re_prodId.findall(text_to_search)
Cela renverra une liste de tous les identifiants de produit.
Essaye ça,
:\\"(\d*)\\"
Donnez plus d'exemples de vos données si cela ne fait pas ce que vous voulez.