Potrzebuję pomocy w zadeklarowaniu wyrażenia regularnego. Moje dane wejściowe są następujące:
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>
Wymagana moc wyjściowa to:
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
Próbowałem tego:
#!/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
Próbowałem również tego (ale wygląda na to, że używam złej składni wyrażenia regularnego):
line2 = line.replace('<[*> ', '')
line = line2.replace('</[*> ', '')
line2 = line.replace('<[*>', '')
line = line2.replace('</[*>', '')
Nie chcę kodować replace
od 1 do 99. . .
where the<[99> number ranges from 1-100</[100>
?<...>
znacznika, więc wynik powinien wynosićwhere the number rangers from 1-100 ?
Odpowiedzi:
Ten przetestowany fragment powinien to zrobić:
Edycja: Oto skomentowana wersja wyjaśniająca, jak to działa:
Regeksy są fajne! Ale zdecydowanie zaleciłbym spędzenie godziny lub dwóch na studiowaniu podstaw. Na początek musisz dowiedzieć się, które postacie są wyjątkowe: „metaznaki”, które należy uciec (tj. Z ukośnikiem umieszczonym z przodu - a zasady są różne wewnątrz i na zewnątrz klas postaci). Doskonały samouczek online na: www .regular-expressions.info . Czas tam spędzony zwróci się wiele razy. Szczęśliwego wyrażenia regularnego!
źródło
str.replace()
naprawia zamienniki. Użyjre.sub()
zamiast tego.źródło
Chciałbym pójść tak (regex wyjaśnione w komentarzach):
Jeśli chcesz dowiedzieć się więcej o wyrażeniach regularnych, polecam przeczytać książkę kucharską wyrażeń regularnych autorstwa Jana Goyvaertsa i Stevena Levithana.
źródło
*
zamiast{0,}
{0,}
jest taki sam jak*
,{1,}
jest równoważny+
i{0,1}
taki sam jak?
. Lepiej jest używać*
,+
lub?
kiedy możesz, po prostu dlatego, że są krótsze i łatwiejsze do odczytania.Najłatwiejszy sposób
źródło
<[^>]+>
? Nawiasem mówiąc: myślę, że twoje wyrażenie regularne byłoby zbyt duże (np. Coś takiego<html>
)metoda replace obiektów łańcuchowych nie akceptuje wyrażeń regularnych, a jedynie stałe łańcuchy (patrz dokumentacja: http://docs.python.org/2/library/stdtypes.html#str.replace ).
Musisz użyć
re
modułu:źródło
\d+
zamiast[0-9]+
nie musisz używać wyrażenia regularnego (dla przykładowego ciągu znaków)
źródło
źródło