2015-07-10 2 views
0

Я не очень хорошо знаком с регулярным выражением. Я использовал следующее регулярное выражение для замены определенного слова из строки только в том случае, если слово не появилось в кавычках.Обрабатывать несбалансированные скобки в регулярном выражении

re.sub(r'("[^"]*")|%s' %word, lambda m: m.group(1) if m.group(1) else "", query) 

Это работает очень хорошо. За исключением того, что когда query = MBA in Human Resource Management (Jaipur National University), я получаю следующую ошибку.

error: unbalanced parenthesis 

Значение слова в данном случае является (Джайпур

Как я могу исправить регулярное выражение, чтобы справиться с несбалансированной скобкой?

ответ

2

Проблемы заключается в том, что, когда word является "(Jaipur", ваше регулярное выражение r'("[^"]*")|(Jaipur', но вы хотите быть r'("[^"]*")|\(Jaipur' чтобы исправить это, вы можете использовать re.escape(word) вместо просто word:.

re.sub(r'("[^"]*")|%s' % re.escape(word), lambda m: m.group(1) if m.group(1) else "", query) 

(См. the documentation for re.escape.)

Смежные вопросы