2009-02-09 2 views

Répondre

4

Essayez:

import re 
re.sub() 
re.findall() 
re.finditer() 

par exemple:

# Finds all words of length 3 or 4 
s = "the quick brown fox jumped over the lazy dogs." 
print re.findall(r'\b\w{3,4}\b', s) 

# prints ['the','fox','over','the','lazy','dogs'] 
+0

Cette question StackOverflow traite de la situation inverse: comment puis-je traduis le re.findall de Python() en Perl? Vérifiez-le. https://stackoverflow.com/a/467820/446767 – Ted

2

Vous pouvez utiliser re.match pour correspondre à des modèles ancrés. re.match ne correspondra qu'au début (position 0) du texte ou à l'endroit spécifié. Cela ne fera correspondre que le motif à partir de la position donnée et les correspondances qui suivent 0 caractères après.

>>> for match in match_sequence(r'[^\W\d]+|\d+',"he11o world!"): 
... print match.group() 
... 
he 
11 
o 
1

Python n'a pas le modificateur/g pour leur regexen, et donc ne pas le \ G jeton regex. Dommage, vraiment.

0

Ne pas essayer de mettre tout en une seule expression car il devient très difficile à lire, traduire (comme vous le voyez par vous-même) et à maintenir. Python n'est généralement pas mieux lorsque vous traduisez littéralement à partir de Perl, il a ses propres modèles de programmation.

2

Je sais que je suis peu en retard, mais voici une alternative à la \G approche:

import re 

def replace(match): 
    if match.group(0)[0] == '/': return match.group(0) 
    else: return '<' + match.group(0) + '>' 

source = '''http://a.com http://b.com 
//http://etc.''' 

pattern = re.compile(r'(?m)^//.*$|http://\S+') 
result = re.sub(pattern, replace, source) 
print(result) 

sortie (via Ideone):

<http://a.com> <http://b.com> 
//http://etc. 

L'idée est d'utiliser une expression régulière qui correspond les deux types de chaîne: une URL ou une ligne commentée. Ensuite, vous utilisez un rappel (délégué, fermeture, code intégré, etc.) pour trouver celui que vous avez apparié et retourner la chaîne de remplacement appropriée.

En fait, ceci est mon approche préférée même dans les saveurs qui ne supportent \G. Même en Java, où je dois écrire un tas de code standard pour implémenter le rappel.

(Je ne suis pas un gars de Python, alors pardonnez-moi si le code est terriblement non pythonique.)

Questions connexes