Wiem, że istnieją pewne posty dotyczące konwersji ciągów do surowych literałów łańcuchowych, ale żadna z nich nie pomaga w mojej sytuacji.Konwertuj ciągi wejściowe użytkownika na nieprzetworzone ciągi znaków w celu skonstruowania wyrażenia regularnego
Mój problem jest:
Załóżmy na przykład, chcę wiedzieć, czy wzór "\ section" w tekście "abcd \ sectiondefghi". Oczywiście, mogę to zrobić:
import re
motif = r"\\section"
txt = r"abcd\sectiondefghi"
pattern = re.compile(motif)
print pattern.findall(txt)
To da mi to, czego chcę. Jednak za każdym razem, gdy chcę znaleźć nowy wzór w nowym tekście, muszę zmienić kod, który jest bolesny. Dlatego chcę napisać coś bardziej elastyczny, tak (test.py):
import re
import sys
motif = sys.argv[1]
txt = sys.argv[2]
pattern = re.compile(motif)
print pattern.findall(txt)
Następnie chcę go uruchomić w terminalu tak:
python test.py \\section abcd\sectiondefghi
jednak, że nie będzie działać (Nienawidzę używać \\\\section
).
Czy jest jakiś sposób na konwersję moich danych wejściowych użytkownika (z terminala lub z pliku) na pytony nieprzetworzony ciąg znaków? Czy istnieje lepszy sposób na kompilację wzorca regularnego z danych wprowadzanych przez użytkownika?
Dziękuję bardzo.
Z drugiej strony, jeśli szukasz literałów, re jest niewłaściwym narzędziem. – Fredrik
@Fredrik: Zakładałem, że to będzie część większego wzorca, a PO po prostu uproszczony. –
@MartijnPieters Dziękuję, re.escape naprawdę pomaga! – dbrg77