我有字符串: -
s = 'bubble'
如何使用正则表达式获取如下列表:
['b', 'u', 'bb', 'l', 'e']
我想过滤单个和双重字母。
答案 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']