2013-09-30 20 views
6

Próbuję wyszukać ciąg znaków, który może zawierać nawiasy lub inne znaki, które nie mogą być interpretowane jako ciągi znaków.python znaleźć ciąg, który może zawierać nawiasy

def findstring(string, text): 
    match = re.search(string, text) 

Nie kontroluję łańcucha, ponieważ pochodzi on z innego modułu. Mój problem polega na tym, że ciąg może zawierać "xyz)", co wywołuje błąd informujący mnie, że są niedopasowane nawiasy.

ja już próbowałem bezskutecznie

match = re.search(r'%s' % string, text) 
+0

Dlaczego w ogóle korzystasz z wyrażenia regularnego? Jeśli łańcuch ma być wyrażeniem regularnym, powinieneś traktować niepoprawne wyrażenia regularne jak "xyz)" jako błędy. Jeśli nie jest on wspierany jako regex, użyj po prostu 'text.find (string)' i całkowicie pomiń moduł regex. – tdelaney

+0

Tak - niesamowite. – JohnGalt

Odpowiedz

10

Można użyć re.escape() uciec ciągu:

match = re.search(re.escape(string), text) 

Od docs:

Return ciąg ze wszystkimi nie-alfanumeryczne odwrotnym ukośnikiem ; jest to przydatne, jeśli chcesz dopasować dowolny ciąg literalny, który może zawierać metaznaki wyrażeń regularnych.

Powiązane problemy