从捕获组中查找以字符开头的所有可能的子字符串

2024-09-30 01:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有一个字符串BANANA,并希望找到所有可能的以元音开头的子字符串。我需要的结果如下:

"A", "A", "A", "AN", "AN", "ANA", "ANA", "ANAN", "ANANA"

我试过了:re.findall(r"([AIEOU]+\w*)", "BANANA") 但它只找到"ANANA",这似乎是最长的匹配。 如何找到所有其他可能的子字符串?在


Tags: 字符串reanbanana元音anafindallanan
3条回答

这是一个简单的方法。当然还有更简单的方法。在

def subs(txt, startswith):
    for i in xrange(len(txt)):
        for j in xrange(1, len(txt) - i + 1):
            if txt[i].lower() in startswith.lower():
                yield txt[i:i + j]

s = 'BANANA'
vowels = 'AEIOU'
print sorted(subs(s, vowels))

更像Python的方式:

>>> def grouper(s):
...     return [s[i:i+j] for j in range(1,len(s)+1) for i in range(len(s)-j+1)]
...
>>> vowels = {'A', 'I', 'O', 'U', 'E', 'a', 'i', 'o', 'u', 'e'}
>>> [t for t in grouper(s) if t[0] in vowels]
['A', 'A', 'A', 'AN', 'AN', 'ANA', 'ANA', 'ANAN', 'ANANA']

有公认答案的基准:

^{pr2}$

结果:

1st:  6.08756995201
2nd :  5.25555992126
s="BANANA"
vowels = 'AIEOU'
sorted(s[i:j] for i, x in enumerate(s) for j in range(i + 1, len(s) + 1) if x in vowels)

相关问题 更多 >

    热门问题