2012-03-21 84 views
1

我正在使用re.search搜索大量字符串,其中一些字符串包含不平衡的括号。我如何让它忽略这些目的?我只是希望它把它当作一个原始字符串。然而,这些字符串都在一个列表,以便在重新表达,我不能只是把一个R”在它的前面:python如何重新忽略原始文本中的括号

for a in some_list: 
    for b in some_other_list: 
     if re.search(a[0],b[0], re.I): 
      do stuff.... 

在该示例[0]包含字符串,我希望它对待每个“(”或“)”字符就是这样,而不是重新编码。

回答

1

出于性能逃逸,正则表达式编译是最好的内环外完成:

for a in some_list: 
    pat = re.compile(re.escape(a[0]), re.I) 
    for b in some_other_list: 
     if pat.search(b[0]): 
      do stuff.... 
+0

太棒了! re.escape(string)是否也会转义可能导致mysql查询问题的字符? – 2012-03-21 10:52:38

+1

're'模块缓存大约100个IIRC的默认're._MAXCACHE'模式,所以're.compile'很少需要。 – wim 2012-03-21 10:56:04

+0

在这种情况下预编译RE避免让系统在缓存中执行查找,然后;-) – Alfe 2012-03-21 15:24:32

1

我想你想在字符串上使用re.escape

re.escape(string)

返回字符串的所有非字母数字 反斜线;如果您想匹配可能包含正则表达式元字符的任意字面值 字符串,这非常有用。

docs