2015-07-10 120 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。)