2011-06-08 3 views
1

J'ai simplement le code html:numér extrait Regex dans le groupe

<span class="someclass" title="4.5 stars"></span> 

ou il pourrait être:

<span class="someclass" title="5 stars"></span> 

J'utilisé ((\d+\.\d+)|(\d+)) star mais il me extrait 3 groupes, je besoin avec une valeur numérique.

Comment puis-je extraire 4.5 et 5 dans les deux chaînes en utilisant Regex dans un groupe?

Merci!

+0

Python, C#, asp.net et js? Qu'est-ce que vous utilisez? –

+0

Comme la plupart des gens, je vous suggère d'utiliser Html Agility Pack pour .net http://htmlagilitypack.codeplex.com/ –

Répondre

4

Essayez de supprimer les parenthèses intérieures:

(\d+\.\d+|\d+) star 

, vous pouvez également envisager d'utiliser un analyseur HTML pour extraire les attributs d'abord plutôt que d'appliquer l'expression régulière directement au HTML brut.

+0

Merci, c'est exactement ce dont j'ai besoin! – ihorko

0

En python, il pourrait être fait de cette façon:

import re 

txt = '<span class="someclass" title="4.5 stars"></span>, <span class="someclass" title="5 stars"></span>' 
re.findall(r'\d+[.]\d+|\d+', txt) 

['4.5', '5'] 
1

Vous pouvez faire des groupes non capture en ajoutant un: après la parenthèse d'ouverture comme celui-ci

((?:\d+\.\d+)|(?:\d+)) star 

mais vos crochets intérieurs ne sont pas nécessaires dans votre cas.

Vous pouvez réécrire votre expression

(\d+(?:\.\d+)?) star