删除连续的字母重复项

Jon*_*now 5 python string spell-checking pattern-matching

寻找一种快速的方法,当重复出现在彼此旁边时,将重复数限制为最大值2.

例如:jeeeeeeeep=>['jep','jeep']

在python中寻找建议,但很高兴看到任何东西的例子 - 不难切换.

谢谢你的帮助!

编辑:英语连续没有任何(或许多)辅音(同一个字母)吗?让我们限制这一点,以便连续不重复辅音,连续两个元音

编辑2:我很傻(嘿,这个词有两个辅音),只是检查所有字母,限制彼此相邻的重复字母为两个.

mac*_*ing 3

这是一个使用递归解决方案groupby。我将您希望能够重复哪些字符留给您自己决定(默认仅元音):

from itertools import groupby

def find_dub_strs(mystring):
    grp = groupby(mystring)
    seq = [(k, len(list(g)) >= 2) for k, g in grp]
    allowed = ('aeioupt')
    return rec_dubz('', seq, allowed=allowed)

def rec_dubz(prev, seq, allowed='aeiou'):
    if not seq:
        return [prev]
    solutions = rec_dubz(prev + seq[0][0], seq[1:], allowed=allowed)
    if seq[0][0] in allowed and seq[0][1]:
        solutions += rec_dubz(prev + seq[0][0] * 2, seq[1:], allowed=allowed)
    return solutions
Run Code Online (Sandbox Code Playgroud)

这实际上只是对可能单词的“解决方案空间”进行启发式修剪的深度优先搜索。启发式是,我们一次只允许一次重复,并且仅当它是有效的可重复字母时。最后应该有 2**n 个单词,其中 n 是字符串中重复“允许”字符的次数。

>>> find_dub_strs('jeeeeeep')
['jep', 'jeep']
>>> find_dub_strs('jeeeeeeppp')
['jep', 'jepp', 'jeep', 'jeepp']
>>> find_dub_strs('jeeeeeeppphhhht')
['jepht', 'jeppht', 'jeepht', 'jeeppht']
Run Code Online (Sandbox Code Playgroud)