gpt4 book ai didi

python - 是否有正则表达式模式可以返回相同字符的所有完全匹配?

转载 作者:行者123 更新时间:2023-12-01 00:56:14 24 4
gpt4 key购买 nike

我想使用正则表达式来查找最长的重复字母组合或重复字母列表。

在这里我已经找到了解决这个问题的模式 ('(?=(.))\1{2,}') 。当我使用搜索功能时,它会返回第一个匹配项。如果我使用 findall,期望获得所有匹配项的列表,我会得到一个符号列表,其中每个符号的长度等于 1。

import re
from Typing import List


def long_repeat(string: str) -> List[int]:
pattern = re.compile(r'(?=(.))\1{2,}')
counts = pattern.some_func(string)
return counts
long_repeat('ddvvrwwwrggg') -> ['dd', 'vv', 'r', 'www', 'r','ggg']
long_repeat('iiaaggg') -> ['ii', 'aa', 'ggg']
long_repeat('abc') -> ['a', 'b', 'c']

最佳答案

也许是这样的:

import re
from typing import List

_RGX = re.compile(r'(.)\1*')
def long_repeat(string: str) -> List[str]:
return [m.group(0) for m in _RGX.finditer(string)]

print(long_repeat('ddvvrwwwrggg'))
# ['dd', 'vv', 'r', 'www', 'r', 'ggg']
print(long_repeat('iiaaggg'))
# ['ii', 'aa', 'ggg']
print(long_repeat('abc'))
# ['a', 'b', 'c']

或者,如果您只想要最长的,并且具有字典优先级:

import re

_RGX = re.compile(r'(.)\1*')
def longest_repeat(string: str) -> int:
return min((m.group(0) for m in _RGX.finditer(string)), key=lambda s: (-len(s), s))

print(longest_repeat('ddvvrwwwrggg'))
# ggg
print(longest_repeat('iiaaggg'))
# ggg
print(longest_repeat('abc'))
# a

关于python - 是否有正则表达式模式可以返回相同字符的所有完全匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56234782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com