如何在单词中找到一个字母的双重出现

时间:2014-02-23 18:35:21

标签: python

我有字符串: -

s = 'bubble'

如何使用正则表达式获取如下列表:

['b', 'u', 'bb', 'l', 'e']

我想过滤单个和双重字母。

2 个答案:

答案 0 :(得分:3)

这应该这样做:

import re

[m.group(0) for m in re.finditer('(.)\\1*',s)]

对于'bubbles',这将返回:

['b', 'u', 'bb', 'l', 'e', 's']

对于'bubblesssss',这将返回:

['b', 'u', 'bb', 'l', 'e', 'sssss']

答案 1 :(得分:0)

你真的有两个问题。第一个问题是如何拆分列表,第二个问题是如何过滤。

分割利用了模式中的反向引用。在这种情况下,我们将构造一个模式,它将找到一个或两个字母的出现,然后从搜索结果中构建一个列表。代码块中的\ 1引用第一个带括号的表达式。

import re
pattern = re.compile(r'(.)\1?')
s = "bubble"
result = [x.group() for x in pattern.finditer(s)]
print(result)

要过滤result中存储的列表,您可以使用按长度过滤的列表推导。

filtered_result = [x for x in result if len(x) == 2]
print(filtered_result)

您可以通过调整正则表达式直接获取重复集。

pattern2 = re.compile(r'(.)\1')
result2 = [x.group() for x in pattern2.finditer(s)]
print(result2)

运行上述内容的输出是:

['b', 'u', 'bb', 'l', 'e']
['bb']
['bb']