Oto regex - próbował przez egrep, a następnie przez Python 2.7:"Nic nie powtórzyć" z Pythona regex
$ echo '/some/path/to/file/abcde.csv' | Egrepuj '* ([a-zA-Z] +) CSV.
/tam/ścieżka/do/pliku/abcde.csv
Jednakże samo wyrażenie regularne w Pythonie
re.match(r'*([a-zA-Z]+)\.csv',f)
daje:
Traceback (most recent call last):
File "/shared/OpenChai/bin/plothost.py", line 26, in <module>
hosts = [re.match(r'*([a-zA-Z]+)\.csv',f).group(1) for f in infiles]
File "/usr/lib/python2.7/re.py", line 141, in match
return _compile(pattern, flags).match(string)
File "/usr/lib/python2.7/re.py", line 251, in _compile
raise error, v # invalid expression
sre_constants.error: nothing to repeat
Doing wyszukiwanie ujawnia wydaje się być błąd Python w grze tutaj:
regex error - nothing to repeat
Wydaje się, że błąd Pythona (który działa idealnie w vim). Źródłem problemu jest bit (\ s * ...) +.
Jednak to nie jest dla mnie jasne: co następnie jest obejście mojego regex wykazano powyżej - aby pyton szczęśliwy?
Dzięki.
Czy próbowałeś '. *' Lub '. *?'? –
To nie jest błąd Pythona; masz '*' (co oznacza "poprzedni znak powtórzony 0 lub więcej razy") bez poprzedniej litery. –
'*' w regex oznacza '0 lub więcej poprzedniego', więc to, na co narzekasz, to błąd wcale nie jest błędem. Co chcesz, aby '*' pasowało? –