web-dev-qa-db-fra.com

Extraction de données avec des expressions régulières Python

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.

9
greyfox
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
18
perreal

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']
9
Fredrik Pihl

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.

1
Tobia

Essaye ça,

 :\\"(\d*)\\"

Donnez plus d'exemples de vos données si cela ne fait pas ce que vous voulez.

0
frickskit