2014-02-10 18 views
0

我需要一個代碼來選擇同一個字符串中的兩個字符。我想在Python中的代碼來查找字符串中的'Atr [0] d'? [0]可能是(h,n)

例子:

我想找到acf('h' or 'n')atd

'avhavaacfhatdvatyacyactycatycasacfnatdtycstyscaacfnatdtycsatycatycaycsa' 
+0

我會推薦使用這個正則表達式。 – Gabe

+2

當你說「找到」時,你是否試圖找到這些字符串中的任何一個的索引?此外,你的標題和你的問題的主體是問兩個不同的東西。請澄清你實際詢問的是哪一個。 – senshin

+0

如果您發現正確或有用的答案,請接受:) – laike9m

回答

0

這是使用正則表達式解決的問題。嘗試使用findallre module

import re 

s = 'avhavaacfhatdvatyacyactycatycasacfnatdtycstyscaacfnatdtycsatycatycaycsa' 
matches = re.findall('acf[hn]atd', s) 
print matches 

輸出:

['acfhatd', 'acfnatd', 'acfnatd'] 
0

findall只返回所有非重疊模式的匹配字符串,如字符串列表。 它不包含約位置 inforamtion,這可能是你想要的。

嘗試finditer相反,它返回一個迭代產生match objects,而匹配的對​​象包含這些信息。

>>> import re 
>>> s = 'avhavaacfhatdvatyacyactycatycasacfnatdtycstyscaacfnatdtycsatycatycaycsa' 
>>> match_iter = re.finditer('acf[hn]atd', s) 
>>> for match in match_iter: 
     print("%s, start: %s, end: %s" % (match.group(), match.start(), match.end())) 

acfhatd, start: 6, end: 13 
acfnatd, start: 31, end: 38 
acfnatd, start: 47, end: 54 

如果匹配的模式重疊,上述代碼不起作用。要查找所有重疊的匹配項,請參見Python regex find all overlapping matches?

對於你的問題

>>> matcheobj = re.finditer(r'(?=(acf[hn]atd))', s) 

由於您的特定模式definitly不會造成重疊,這都沒有區別,其形成使用。

相關問題