web-dev-qa-db-fra.com

Exemple d'expression régulière Python

Je veux écrire une expression régulière simple en Python qui extrait un nombre à partir de HTML. L'exemple HTML est le suivant:

Your number is <b>123</b>

Maintenant, comment puis-je extraire "123", c’est-à-dire le contenu du premier texte en gras après la chaîne "Votre numéro est"?

35
Saqib
import re
m = re.search("Your number is <b>(\d+)</b>",
      "xxx Your number is <b>123</b>  fdjsk")
if m:
    print m.groups()[0]
54
Yevgen Yampolskiy

Étant donné s = "Your number is <b>123</b>" alors:

 import re 
 m = re.search(r"\d+", s)

va travailler et vous donner

 m.group()
'123'

L'expression régulière recherche 1 ou plusieurs chiffres consécutifs dans votre chaîne. 

Notez que dans ce cas particulier, nous {savions qu'il y aurait une séquence numérique, sinon vous devriez tester la valeur de retour de re.search() pour vous assurer que m contient une référence valide, sinon m.group() donnerait un AttributeError: exception.

Bien sûr, si vous allez traiter beaucoup de HTML, vous voulez examiner sérieusement BeautifulSoup - il est fait pour cela et bien plus encore. L’idée principale de BeautifulSoup est d’éviter une analyse "manuelle" à l’aide d’opérateurs de chaîne ou de expressions régulières .

21
Levon
import re
x = 'Your number is <b>123</b>'
re.search('(?<=Your number is )<b>(\d+)</b>',x).group(0)

ceci recherche le numéro qui suit la chaîne "Votre numéro est"

10
muffel
import re
print re.search(r'(\d+)', 'Your number is <b>123</b>').group(0)
5
Jacob Abraham

Le plus simple est d'extraire un chiffre (nombre) 

re.search(r"\d+",text)
4
Avinash Kumar
import re
found = re.search("your number is <b>(\d+)</b>", "something.... Your number is <b>123</b> something...")

if found:
    print found.group()[0]

Ici (\ d +) est le groupement, puisqu'il n'y a qu'un seul groupe [0] utilisé. Quand il y a plusieurs groupements, [grouping index] doit être utilisé.

2
val="Your number is <b>123</b>"

Option 1

m=re.search(r'(<.*?>)(\d+)(<.*?>)',val)

m.group(2)

Option 2

re.sub(r'([\s\S]+)(<.*?>)(\d+)(<.*?>)',r'\3',val)
1
Saikat Dasgupta

Vous pouvez utiliser l'exemple suivant pour résoudre votre problème:

import re

search = re.search(r"\d+",text).group(0) #returns the number that is matched in the text

print("Starting Index Of Digit", search.start())

print("Ending Index Of Digit:", search.end())
0
sadiq shah