2012-04-05 4 views
0

Je me bats pour construire une expression rationnelle pour attraper les mots commençant par tw (ou Tw, ou TW) s'ils sont entre guillemets (simples ou doubles) ou non. Jusqu'ici, '\ b [tT] [wW] [a-zA-Z0-9] *' récupère tous les mots de départ tw, tw et TW, mais manque ceux de btw entre guillemets simples ou doubles. Il trouve à la fois tweeple et TWEEPLE mais pas 'tweeple' ni 'TWEEPLE'.regexp: tw- mots préfixés avec des guillemets optionnels

Aide très appréciée.

Répondre

2

Le \b dans votre chaîne est interprété comme un caractère de retour arrière, pas la séquence \b qui serait interprétée comme une limite de mot par le moteur regex. Changez votre chaîne à un raw string literal ou échapper à la barre oblique inverse et il devrait fonctionner:

>>> re.findall(r'\b[tT][wW][a-zA-Z0-9]*', ' "TWEEPLE" tweeple ') 
['TWEEPLE', 'tweeple'] 

Voici un exemple de la différence:

>>> 'abc\b' 
'abc\x08' 
>>> print 'abc\b' 
abc 
>>> r'abc\b' 
'abc\\b' 
>>> print r'abc\b' 
abc\b 
+0

Bonne prise sur le '\ b' ne pas être un littéral. Et je ne me suis pas rendu compte qu'il inclut des citations - c'est logique cependant. Supprimer ma réponse –

Questions connexes