J'ai besoin d'aide pour déclarer une expression régulière. Mes entrées sont les suivantes:
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é ça:
#!/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 également essayé ceci (mais il semble que j'utilise la mauvaise syntaxe regex):
line2 = line.replace('<[*> ', '')
line = line2.replace('</[*> ', '')
line2 = line.replace('<[*>', '')
line = line2.replace('</[*>', '')
Je ne veux pas coder en dur le replace
1 à 99. . .
where the<[99> number ranges from 1-100</[100>
?<...>
balise, donc la sortie devrait êtrewhere the number rangers from 1-100 ?
Réponses:
Cet extrait testé devrait le faire:
Edit: Voici une version commentée expliquant comment cela fonctionne:
Les regex sont amusants! Mais je recommanderais fortement de passer une heure ou deux à étudier les bases. Pour commencer, vous devez savoir quels caractères sont spéciaux: les "métacaractères" qui doivent être échappés (c'est-à-dire avec une barre oblique inverse placée devant - et les règles sont différentes à l'intérieur et à l'extérieur des classes de caractères.) Il existe un excellent tutoriel en ligne sur: www .regular-expressions.info . Le temps que vous y passerez sera amorti plusieurs fois. Regexing heureux!
la source
str.replace()
fait des remplacements fixes. Utilisezre.sub()
plutôt.la source
J'irais comme ça (regex expliqué dans les commentaires):
Si vous voulez en savoir plus sur l' expression régulière, je vous recommande de lire le livre de recettes d'expressions régulières de Jan Goyvaerts et Steven Levithan.
la source
*
au lieu de{0,}
{0,}
est le même que*
,{1,}
est équivalent à+
et{0,1}
est le même que?
. Il vaut mieux l'utiliser*
,+
ou?
quand vous le pouvez, simplement parce qu'ils sont plus courts et plus faciles à lire.La manière la plus simple
la source
<[^>]+>
? Soit dit en passant: je pense que votre expression régulière correspondrait trop (par exemple quelque chose comme<html>
)La méthode replace des objets chaîne 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 le
re
module:la source
\d+
place de[0-9]+
ne pas utiliser d'expression régulière (pour votre exemple de chaîne)
la source
la source