2012-07-27 81 views
-1

這裏是集團的模式蟒蛇正則表達式:不給它匹配

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

下面是函數

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

這裏是輸入

\xc2d 
d\xa0 
\xe7 
\xc3\ufffdd 
\xc3\ufffdd 
\xc2\xa0 
\xc3\xa7 
\xa0\xa0 
'619d813\xa03697' 

當我運行此,我得到的輸出爲

INFO:root:found in line - \xc2d 

INFO:root:found - d 
INFO:root:found in line - d\xa0 

INFO:root:found - d 
INFO:root:found in line - \xc3\ufffdd 

INFO:root:found - u 
INFO:root:found in line - \xc3\ufffdd 

INFO:root:found - u 
INFO:root:found in line - '619d813\xa03697' 

INFO:root:found - d 

問題 - 爲什麼它不告訴整個模式像\xc2d?我在這裏做的不正確嗎? - 什麼是我需要爲了做的就是類似模式的\xc2d代替d

UPDATE

換款到join_pattern = '(' + '|'.join(pattern_strings) + ')'匹配不匹配任何

更新1

pattern_strings = ['\\xc2d', '\\xa0', '\\xe7', '\\xc3\\ufffdd', '\\xc2\\xa0', '\\xc3\\xa7', '\\xa0\\xa0', '\\xc2', '\\xe9'] 

join_pattern = '|'.join(pattern_strings) 
pattern = re.compile(join_pattern) 

這不匹配輸入任何東西:(

+0

我猜你試圖匹配'pattern_strings'中的字符串之一?不要將正則表達式封裝在方括號中。這表示一套。 – 2012-07-27 19:38:24

+0

爲什麼人們經常發表回答作爲評論? – 2012-07-27 19:39:39

+0

你的問題是你模式中的['和']' - 刪除它們! – 2012-07-27 19:39:46

回答

1

re方括號表示設置

join_pattern = '[' + '|'.join(pattern_strings) + ']'使正則表達式匹配「中的字符集合中的任何一個{ \ x c 2 d a 0 e 7 3 u f 9 | }「。這可能不是你想要的行爲。對於要使用的表達式:

join_pattern = '|'.join(pattern_strings) 

不需要括號,除非您試圖指定捕獲/非捕獲組。

+0

+1,回答您的評論 – 2012-07-27 19:50:04

0

的問題是,你已經包圍了正則表達式用方括號,[]。這些表示一組字符;即[abc|def]將匹配a,b,c,|,d,ef之一。用正則表達式,不需要括號。如果這是更大表達式的一部分,則可以使用圓括號()來表示一個組,它將正則表達式的一部分組合在一起。 (它也是一個捕獲組,因此它的內容可以與.group(1)被訪問。)