2013-11-22 28 views
0

我有與大小寫無關的正則表達式搜索相關的問題。下面是代碼的一部分,我寫道:如何在Python中使用正則表達式時忽略大小寫?

engType = 'XM665' 

engType值由其他文件中提取。基於engType,我想在包含此部分的另一個文本文件中查找行,並從該行中提取描述信息,說明部分位於engType字符串和'Serial'之間。

例如:

lines = ['xxxxxxxxxxx','mmmmmmmmmmm','jjjjj','xM665 Module 01 Serial (10-11)'] 
pat = re.compile(engType+'(.*?)[Ss][Ee][Rr][Ii][Aa][Ll]') 
for line in lines: 
    des = pat.search(line).strip() 
    if des: 
     break; 
print des.group(1).strip() 

我知道結果會是一個錯誤,因爲我的字符串engType的情況下,是從什麼是'xM665 Module 01 Serial (10-11)',我明白,我可以使用[Ss]做的情況不同如我在pat的最後部分所做的那樣不敏感的比較。但是,因爲我的engType是一個變量,所以我無法將它應用於變量。我知道我可以在較低的情況下搜索,如:

lines = ['xxxxxxxxxxx','mmmmmmmmmmm','jjjjj','xM665 Module 01 Serial (10-11)'] 
pat = re.compile(engType.lower()+'(.*?)serial') 
for line in lines: 
    des = pat.search(line.lower()).strip() 
    if des: 
     break; 
print des.group(1).strip() 

結果:相比Module 01

module 01 

的情況是現在不同了。如果我想保持這種情況,我該怎麼做?謝謝!

回答

2

re.IGNORECASE是你正在尋找的國旗。

pat = re.compile(engType+'(.*?)[Ss][Ee][Rr][Ii][Aa][Ll]',re.IGNORECASE) 

或者更簡單地re.compile(engType+'(.*?)serial',re.IGNORECASE)

也,錯誤在這條線:

des = pat.search(line.lower()).strip() 

卸下.strip();如果pat.search()None,您將得到一個AttributeError

+0

好,太感謝你了!這工作完美。 – fyr0049

1

退房re.IGNORECASE在http://docs.python.org/3/library/re.html

我相信它會像:

pat = re.compile(engType.lower()+'(.*?)serial', re.IGNORECASE) 
+0

雅,這個作品,謝謝!我認爲re.compile(engType +'(。*?)serial',re.INGORECASE)會這樣做,不需要降低engType – fyr0049

相關問題