Próbuję zrzucić dane z pliku eksportu SQL za pomocą wyrażenia regularnego. Aby dopasować pole treści wiadomości, używam "(?P<content>.*?)
". To działa dobrze przez większość czasu, ale jeśli pole zawiera ciąg "\ n", wyrażenie regularne nie będzie pasować. Jak zmodyfikować wyrażenie regularne, aby je dopasować? Dzięki!Wyrażenie regularne: jak dopasować ciąg zawierający " n" (znak nowej linii)?
Przykład (ja Pythonie)
>>> re.findall("'(?P<content>.*?)'","'<p>something, something else</p>'")
['<p>something, something else</p>']
>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'")
[]
P.S. Pozornie wszystkie ciągi z "\" z przodu są traktowane jako znaki ucieczki. Jak mogę powiedzieć regxowi, aby traktował je takimi, jakie są?
Dzięki! Ponadto, na przykład, jeśli w tekście napisałem "\ a", zostanie on przekonwertowany na "\ x07". Czy istnieje sposób, aby zatrzymać je takimi, jakie są? A może to nie ma znaczenia, kiedy umieściłem je w bazie danych? –
'\ x07' jest po prostu sposobem dla Pythona do reprezentowania znaku z kodem 7. Innym sposobem na jego reprezentację jest napisanie' \ a'. Łańcuch w rzeczywistości zawiera tylko jeden znak w obu przypadkach. Możesz to potwierdzić, zaznaczając 'len (" \ x07 ")' i 'len (" \ a ")'. Spróbuj także porównać '" \ a "==" \ x07 "' lub wyszukać '" a "' in' "\ a" ':" "\ a" .find ("a") 'lub dla' "0" 'w' "\ x07" ':' "\ x07" .find ("0") '. Wyniki powinny być bardzo pouczające. –
Cześć Adam! Nadal stwarza problem, jeśli łańcuch początkowy zawiera \ 'Wynik zostanie przekonwertowany na', co spowoduje przerwanie poleceń sql. Dlatego ważne jest, aby napis "tak jak jest" –