J'ai une expression régulière Perl (montré here, bien comprendre que tout cela est nécessaire pour ne pas nous l'espérons répondre à cette question) qui contient le \ G métacaractère. Je voudrais le traduire en Python, mais Python ne semble pas supporter \ G. Que puis-je faire?Est-ce que les expressions rationnelles Python supportent quelque chose comme Perl's G?
Répondre
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']
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
Python n'a pas le modificateur/g pour leur regexen, et donc ne pas le \ G jeton regex. Dommage, vraiment.
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.
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.)
- 1. Que signifient ces expressions rationnelles Perl?
- 2. Est-ce que Python a quelque chose comme les classes internes anonymes de Java?
- 3. Quelque chose comme SciPy dans Ruby?
- 4. Correspondance efficace de plusieurs expressions rationnelles en Python
- 5. Est-ce que les listes en C# supportent le tranchage comme en Python?
- 6. Correspond à unicode dans les expressions rationnelles de ply
- 7. Quelque chose comme Crystal Reports pour PHP?
- 8. composant ImageGrid ou quelque chose comme ça
- 9. Est-ce que python a quelque chose comme C++ utilisant un mot-clé?
- 10. Stocker les expressions rationnelles compilées PCRE en C/C++
- 11. Quelque chose comme les paramètres C# en C++?
- 12. Y a-t-il quelque chose comme 'autotest' pour les tests unitaires Python?
- 13. est-ce que cgi-bin a quelque chose comme les filtres de servlet
- 14. Quelle est la différence entre déclarer comme nouveau et comme quelque chose = quelque chose de nouveau dans vb.net?
- 15. Ruby analyseur de code source (quelque chose comme pylint)
- 16. recherche d'interface pour quelque chose comme Appendable ou OutputStream
- 17. Existe-t-il quelque chose comme Project Sprouts mais implémenté en Python?
- 18. Quelque chose fonctionne comme "did Init" ?? [objectif-c]
- 19. Comment emballer un int [,] avec quelque chose comme une ReadOnlyCollection?
- 20. PHP 'quelque chose comme widget' conception du code
- 21. Comment faire quelque chose comme ça dans Scala?
- 22. Nettoyer les expressions régulières Python
- 23. Y at-il quelque chose comme une base de données de traduction pour les chaînes?
- 24. Y a-t-il quelque chose comme getattr() de Python en C#?
- 25. Quelque chose comme mapM, mais pour les tableaux? (comme arrayMap, mais mappage d'une fonction impure)
- 26. Je voudrais trouver quelque chose comme gkrellm pour Mac
- 27. Y at-il quelque chose comme jquery pour WPF/XAML?
- 28. Il y a vraiment quelque chose comme Objective C++?
- 29. url MVC réécrire quelque chose comme http://controller.website.com
- 30. C++ vecteur littéraux, ou quelque chose comme eux
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