2012-03-21 28 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