Preciso de ajuda para declarar uma regex. Minhas entradas são como as seguintes:
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>
A saída necessária é:
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
Eu tentei isso:
#!/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
Eu também tentei isso (mas parece que estou usando a sintaxe regex errada):
line2 = line.replace('<[*> ', '')
line = line2.replace('</[*> ', '')
line2 = line.replace('<[*>', '')
line = line2.replace('</[*>', '')
Não quero codificar replace
de 1 a 99. . .
where the<[99> number ranges from 1-100</[100>
?<...>
tag, então a saída deve serwhere the number rangers from 1-100 ?
Respostas:
Este snippet testado deve fazer isso:
Edit: Aqui está uma versão comentada explicando como funciona:
Regexes são divertidos! Mas eu recomendaria fortemente passar uma ou duas horas estudando o básico. Para iniciantes, você precisa aprender quais personagens são especiais: "metacaracteres" que precisam ser escapados (ou seja, com uma barra invertida colocada na frente - e as regras são diferentes dentro e fora das classes de personagens). Existe um excelente tutorial on-line em: www .regular-expression.info . O tempo que você passa lá se paga muitas vezes. Feliz regexing!
fonte
str.replace()
faz substituições fixas. Use emre.sub()
vez disso.fonte
Eu iria assim (regex explicado nos comentários):
Se você quiser saber mais sobre o regex, recomendo ler o Regular Expressions Cookbook de Jan Goyvaerts e Steven Levithan.
fonte
*
em vez de{0,}
{0,}
é o mesmo que*
,{1,}
é equivalente a+
e{0,1}
é o mesmo que?
. É melhor usar*
,+
ou?
quando puder, simplesmente porque são mais curtos e fáceis de ler.A maneira mais fácil
fonte
<[^>]+>
:? A propósito: Eu acho que sua regex combinaria muito (por exemplo, algo como<html>
)O método replace de objetos de seqüência de caracteres não aceita expressões regulares, mas apenas seqüências de caracteres fixas (consulte a documentação: http://docs.python.org/2/library/stdtypes.html#str.replace ).
Você precisa usar o
re
módulo:fonte
\d+
vez de[0-9]+
não precisa usar expressão regular (para sua sequência de amostra)
fonte
fonte