我需要一個代碼來選擇同一個字符串中的兩個字符。我想在Python中的代碼來查找字符串中的'Atr [0] d'? [0]可能是(h,n)
例子:
我想找到acf('h' or 'n')atd
在
'avhavaacfhatdvatyacyactycatycasacfnatdtycstyscaacfnatdtycsatycatycaycsa'
我需要一個代碼來選擇同一個字符串中的兩個字符。我想在Python中的代碼來查找字符串中的'Atr [0] d'? [0]可能是(h,n)
例子:
我想找到acf('h' or 'n')atd
在
'avhavaacfhatdvatyacyactycatycasacfnatdtycstyscaacfnatdtycsatycatycaycsa'
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不會造成重疊,這都沒有區別,其形成使用。
我會推薦使用這個正則表達式。 – Gabe
當你說「找到」時,你是否試圖找到這些字符串中的任何一個的索引?此外,你的標題和你的問題的主體是問兩個不同的東西。請澄清你實際詢問的是哪一個。 – senshin
如果您發現正確或有用的答案,請接受:) – laike9m