2014-05-22 21 views
5

Mam słownik (np. Angielski - chorwacki). Może zawierać zdania i frazy. Tłumaczę plik formularza "english text" = "english text" na formularz "english text" = "croatian text" i za pomocą modułu python regex, aby to zrobić. regex używam wygląda następująco (podano zmienna oryginalny który to tekst w języku angielskim, które powinny być przetłumaczone:Dosłowne nawiasy z pythonem regex

regexString = '(?<= = ")'+original+'(?=")' 

ten sposób I'am w stanie uchwycić dokładnie angielskiej tekstu wewnątrz cudzysłowów na po prawej stronie i zastąpić ją chorwacki pojawia się jednak problem, jeśli oryginalny tekst zawiera nawias wewnątrz Na przykład:..

original = 'This is a wonderland :)' 

W tym przypadku błąd „niezrównoważony nawias” jest podniesiony Jeśli oryginalny będzie. być ha rd kodowane, mogę rozwiązać ten problem poprzez umieszczenie

original = 'This is a wonderland :\\)' 

Jednakże istnieje cały plik pełne oryginalnych zmiennych *. *
Czy istnieje rozwiązanie tego problemu, oprócz zmiany zmiennej oryginalnej przez poprzedzanie wszystkich nawiasów za pomocą odwrotnego ukośnika?

+0

@Tim Pietzcker, dlaczego ** ** podwójny backslash? – kruk

+1

Należy odwrócić ukośnik odwrotny, ponieważ w przeciwnym razie może rozpocząć sekwencję specjalną, w zależności od znaku, który następuje po niej. Podczas gdy '\)' jest jednoznaczne (i będzie tłumaczone przez interpreter Pythona na '\\)' automatycznie), inne sekwencje, takie jak '\ n',' \ b', mają specjalne znaczenie. Dobrą praktyką jest uczynienie tego wyraźnym, podwajając ukośniki odwrotne lub używając ciągów stałych. –

Odpowiedz

3

Można użyć re.escape obsłużyć tego:

regexString = '(?<= = ")' + re.escape(original) + '(?=")' 
+0

dzięki za szybką odpowiedź, pomogło! – kruk