La saisie d'une expression régulière dans une chaîne.remplacer?
J'ai besoin d'aide sur la déclaration d'une regex. Mes entrées sont comme suit:
this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>.
and there are many other lines in the txt files
with<[3> such tags </[3>
La sortie requise est:
this is a paragraph with in between and then there are cases ... where the number ranges from 1-100.
and there are many other lines in the txt files
with such tags
J'ai essayé ceci:
#!/usr/bin/python
import os, sys, re, glob
for infile in glob.glob(os.path.join(os.getcwd(), '*.txt')):
for line in reader:
line2 = line.replace('<[1> ', '')
line = line2.replace('</[1> ', '')
line2 = line.replace('<[1>', '')
line = line2.replace('</[1>', '')
print line
J'ai aussi essayé (mais il me semble que je suis en utilisant la mauvaise syntaxe regex):
line2 = line.replace('<[*> ', '')
line = line2.replace('</[*> ', '')
line2 = line.replace('<[*>', '')
line = line2.replace('</[*>', '')
Je ne veux pas coder en dur la replace
de 1 à 99 . . .
- La accepté de répondre couvre déjà votre problème et le résout. Avez-vous besoin d'autre chose ?
- Quel devrait être le résultat pour
where the<[99> number ranges from 1-100</[100>
? - il convient également de supprimer le numéro dans le
<...>
marque, de sorte que la sortie doit êtrewhere the number rangers from 1-100 ?
Vous devez vous connecter pour publier un commentaire.
Ce testés extrait devrait le faire:
Edit: Voici une version commentée en expliquant comment elle fonctionne:
Regexes sont plaisir! Mais je vous recommande fortement de passer une heure ou deux d'étudier les notions de base. Pour commencer, vous devez savoir quels sont les caractères spéciaux: "métacaractères" qui doivent être échappés (c'est à dire avec une barre oblique inverse mis en avant et les règles sont différentes à l'intérieur et à l'extérieur des classes de caractères.) Il y a un excellent tutoriel en ligne à: http://www.regular-expressions.info. Le temps que vous passez, il va payer pour lui-même à plusieurs reprises. Heureux regexing!
str.replace()
fait des remplacements fixes. Utilisationre.sub()
à la place.J'irais comme ça (regex expliqué dans les commentaires):
Si vous voulez en savoir plus sur les regex je vous conseille de lire Les Expressions Régulières Livre De Recettes par Jan Goyvaerts et Steven Levithan.
*
au lieu de{0,}
{0,}
est le même que*
,{1,}
est équivalent à+
, et{0,1}
est le même que?
. Il est préférable d'utiliser*
,+
, ou?
quand vous le pouvez, tout simplement parce qu'ils sont plus courts et plus faciles à lire.La façon la plus simple
<[^>]+>
? Par la route: je pense que votre regex correspondent à une trop grande quantité (par exemple, quelque chose comme<html>
)remplacement de la méthode de chaîne objets n'accepte pas les expressions régulières, mais seulement les chaînes fixes (voir la documentation: http://docs.python.org/2/library/stdtypes.html#str.replace).
Vous devez utiliser
re
module:\d+
au lieu de[0-9]+
n'avez pas à utiliser l'expression régulière (pour votre chaîne exemple)