2012-07-27 26 views
4

我要尋找以下模式在文件中,python正則表達式:我怎樣纔能有模式搜索多個模式字符串?

pattern_strings = ['\xc2d', '\xa0', '\xe7', '\xc3\ufffdd', '\xc2\xa0', '\xc3\xa7', '\xa0\xa0', '\xc2', '\xe9'] 
pattern = [re.compile(x) for x in pattern_strings] 

和功能使用該

def find_pattern(path): 
    with open(path, 'r') as f: 
     for line in f: 
      found = pattern.search(line) 
      if found: 
       logging.info('found - ' + found) 

(任何比賽資格),當我嘗試使用它

find_pattern('myfile') 

我見AttributeError: "'list' object has no attribute 'search'"

因爲圖案是

[<_sre.SRE_Pattern object at 0x107948378>, <_sre.SRE_Pattern object at 0x107b31c70>, <_sre.SRE_Pattern object at 0x107b31ce0>, <_sre.SRE_Pattern object at 0x107ac3cb0>, <_sre.SRE_Pattern object at 0x107b747b0>, <_sre.SRE_Pattern object at 0x107b74828>, <_sre.SRE_Pattern object at 0x107b748a0>, <_sre.SRE_Pattern object at 0x107b31d50>, <_sre.SRE_Pattern object at 0x107b31dc0>]

怎樣纔可以有一個模式看起來在pattern_strings所有字符串?

回答

4

你可以簡單地用|串接所有表情在一起:

pattern_strings = ['\xc2d', '\xa0', '\xe7', '\xc3\ufffdd', '\xc2\xa0', '\xc3\xa7', '\xa0\xa0', '\xc2', '\xe9'] 
pattern_string = '|'.join(pattern_strings) 
pattern = re.compile(pattern_string) 

這不,但是,假設沒有你的模式是夠複雜的了,像這樣簡單的串連可能打破。對於你的例子中的那些,它應該工作。對於更復雜的模式,它可能不會。

+2

你還應該從最長到最短的列表排序......否則你將得不到你期望的結果.. – 2012-07-27 18:26:11

相關問題