2010-04-23 54 views
1

我想要做這樣的事情:Python的re.IGNORECASE是動態

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',re.I) 

而且具有如re.I是動態的,這樣我就可以在飛行中做區分大小寫不敏感或比較。這有效,但沒有記錄:

re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',1) 

將其設置爲敏感。有沒有Pythonic的方式來做到這一點?我目前最好的想法是:

if case_sensitive: 
    regex_senstive = 1 
else: 
    regex_sensitive = re.I 
re.findall(r"(?:(?:\A|\W)" + 'Hello' + r"(?:\Z|\W))", 'hello world',regex_sensitive) 

回答

2

要獲得默認行爲,可以使用0作爲flags參數。你不應該使用1,因爲它會設置無證的re.TEMPLATE標誌,禁止回溯。

因此可以使用:

flags = 0 if case_sensitive else re.I 
re.findall(r'pattern', s, flags) 

flags參數實際上是標誌(re.Ire.M等)的組合,與由單個位表示的每一個標誌。當沒有位被設置(值0)時,使用默認行爲。

+0

缺省行爲是否可靠區分大小寫? – 2010-04-23 20:53:36

+0

是的。 --- – interjay 2010-04-23 21:02:02