Je dois lire un fichier texte ligne par ligne et extraire une partie de chaque ligne. J'ai un code de travail si la ligne que je lis est dans le format attendu mais ce n'est pas toujours le cas. Il y a des erreurs dans le fichier, c'est-à-dire des informations ou des caractères manquants. Donc, je veux sauter ces lignes défectueuses. Pour cela, je veux utiliser le module regular expression
. J'ai défini l'expression régulière dont j'ai besoin. Disons, reg_exp_string
va correspondre à la ligne que j'ai lu. Je veux un match complet, je ne veux pas fouiller une partie du texte. S'il s'agit d'une correspondance complète, renvoyez true, sinon renvoyez false. Le penser est, j'ai essayé re.match()
et il renvoie un objet. Je ne pouvais pas comprendre. Quelle est la bonne façon de l'utiliser? Il renvoie toujours un objet si une partie de la chaîne correspond à l'expression régulière. Je veux seulement un match complet et obtenir une réponse booléenne. Comment puis-je faire ceci?Module d'expression régulière python
Répondre
Comme mentionné dans le documentation, $
correspond à la fin d'une chaîne. Vous pouvez modifier votre expression régulière pour inclure $
à la fin. Exemple:
match_this = "abc12a" #expression you would like to match
dont_match_this = "abc12a9" #expression that returns partial matches from re.match
L'ancienne expression régulière correspondra à la fois match_this
et dont_match_this
:
old_reg_expr = "[a-z]+\d[a-z]+"
La nouvelle expression régulière contient $
et retourne seulement un match si la chaîne se termine après le dernier élément adapté à l'expression :
new_reg_expr = "[a-z]+\d[a-z]+$"
Alternativement, vous pourriez laisser votre ancienne expression régulière intacte et juste ck pour voir si la position de fin du match est égal à la fin de la chaîne:
>>> m = re.match("[a-z]+\d[a-z]+", "abc12a9")
>>> m.end() == m.endpos
False
La documentation pour les objets de correspondance est a little further down.
re.match()
doit retourner un objet de correspondance, à moins qu'il n'y a pas de correspondance, auquel cas il retourne None
:
Je serais reconnaissant si une explication pour les downvotes pourrait être fournie. – ubik
Comme indiqué dans http://docs.python.org/library/re.html, match() retourne une MatchObject est une correspondance est trouvée , Aucun autrement.
Alors, dites simplement:
for line in ... :
m = your_regexp.match(line)
if m:
process(line)
S'il correspond au début, il renvoie un objet mais, Ce dont j'ai besoin, c'est un texte entier. –
@gokhan_ufl: Vous pouvez vérifier si 'match.end() == match.endpos' pour s'assurer que la correspondance est pour toute la chaîne. –
merci. C'est ce que je cherchais.En fait, la réponse est plus courte que les messages "lire ce document". Et ça aide vraiment. C'est l'élément clé, je suppose. Aider les gens. –
- 1. Python. Expression régulière
- 2. Module Python
- 3. python: expression régulière multiligne
- 4. expression régulière python
- 5. Python expression régulière sous
- 6. python expression régulière appengine
- 7. Expression régulière Python Correspondance: ####
- 8. python expression régulière caractères
- 9. Expression régulière [^.] En Python
- 10. Python Expression régulière
- 11. expression régulière python aide
- 12. Python Expression régulière Question
- 13. Python - Expression régulière Assistance
- 14. python expression régulière substitut
- 15. Python réutilisation expression régulière
- 16. expression régulière python
- 17. Python incohérence d'expression régulière
- 18. Expression régulière en Python?
- 19. python expression régulière remplacer
- 20. Mosso Python Module
- 21. Module Python: Sortie incohérente
- 22. Organisation du module python
- 23. Python "chaîne" module?
- 24. Problème de module Python
- 25. Module Python et FTPlib
- 26. Module de lecture Python
- 27. Module SSH pour python
- 28. Module Python et __all__
- 29. Module Python introuvable
- 30. python module ConfigParser
expression régulière Comment-Tutorial/http://docs.python.org/howto/regex.html – Levon
Avez-vous lire la documentation? http://docs.python.org/library/re.html – Riking
Cette question ne montre absolument aucun effort de recherche de la part du PO. http://meta.stackexchange.com/a/128553 –