2010-12-09 25 views
0

Salut J'ai besoin d'une regex ICU que je pense que c'est assez basique mais je ne sais pas comment le construire correctement. Le regex doit correspondre à des chaînes comme:Comment créer une regex ICU pour correspondre à ce type de chaîne?

font-size: 9pt; 
font-size: 15pt; 
font-size:2pt; 
font-size:22pt; 

Je suis en train de faire quelque chose comme ça, mais il ne fonctionne pas:

regex = \bfont\-size: [0-9]{3}pt;\b 

Je suis vraiment nouveau à regex donc je ne suis pas sûr qu'est-ce que je fais mal ici. Toute aide est très appréciée.

P.S .: Est-ce que quelqu'un connaît une bonne ressource pour prendre le coup de cette rapide?

Répondre

1

font\-size\: ?[0-9]{1,3}pt\;

devrait faire l'affaire. Essentiellement, échapper tous les caractères non alphanumériques (juste pour être du bon côté). En outre, {1,3} signifie répéter 0-9 d'une à trois fois, au lieu de toujours trois fois.

Édition: Mise à jour de l'expression rationnelle ci-dessus. Le \b de fin a été supprimé et l'espace avant le nombre a été rendu facultatif en utilisant ?.

démonstration Python:

>>> import re 
>>> s = """ 
... font-size: 9pt; 
... font-size: 15pt; 
... font-size:2pt; 
... font-size:22pt; 
... """ 
>>> re.findall("font\-size\: ?[0-9]{1,3}pt\;", s) 
['font-size: 9pt;', 'font-size: 15pt;', 'font-size:2pt;', 'font-size:22pt;'] 
+0

super, merci! Et comment puis-je changer cela pour correspondre à ce genre de chaînes mais avec des nombres décimaux? par exemple. taille de police: 9.5pt; J'ai essayé: font \ -size \:? [0-9] {1,3} (\. [0-9] +)? Pt \; et ça ne marche pas. C'est tellement frustrant ... –

+0

Une approche très simple serait 'font \ -size \:? [0-9 \.] {1,3} pt \;', mais cela correspondrait aussi à des trucs comme 9.5.2pt. (** EDIT: ** En fait, il ne correspondra pas à 9.5.2 car il ne correspond qu'à 3 caractères, heh.) Il n'y a rien de mal dans votre regex, peut-être que vous l'utilisez mal. –

+0

Nous vous remercions de votre temps et de votre aide! Tu as raison, je l'utilisais mal. Ça fonctionne maintenant. –

0

Deux problèmes que je vois avec votre regex:

  1. {3} correspond exactement à trois choses. Vous voulez probablement {1,3} pour correspondre à 1 à 3.

  2. Je ne pense pas que \b va faire ce que vous voulez juste après un point-virgule. Peut-être que vous voulez quelque chose comme \s* (zéro ou plus d'espace).

Si vous voulez apprendre regexes rapide, votre meilleur pari pourrait être d'utiliser un regex debugging tool et expérience.