python限制重复字母
发布时间:2020-12-20 11:19:51 所属栏目:Python 来源:网络整理
导读:将重复字母限制为1和2的最佳方法是什么,例如: appppppppple = aple和苹果 bbbbbeeeeeer = ber,啤酒,bber,bbeer 现在,我有这个: a = "hellllllllllooooooooooooo" match = re.search('(.)1+',a) if match: print 'found' print re.sub('(.)1+','1',a)
将重复字母限制为1和2的最佳方法是什么,例如:
appppppppple => aple和苹果 bbbbbeeeeeer => ber,啤酒,bber,bbeer 现在,我有这个: a = "hellllllllllooooooooooooo" match = re.search('(.)1+',a) if match: print 'found' print re.sub('(.)1+','1',a) print re.sub('(.)1+','11',a) else: print 'not found' 但它只会返回: helo helloo 我怎样才能让它按照我想要的方式工作? 解决方法
不要为此使用RE. RE适用于搜索,匹配和转换,但不适用于生成字符串.
我们可以将字符串视为向量;每个字母都是一个维度,重复计数是沿该维度的组件长度.给定向量V,您需要与V相同维度的所有可能向量,使得如果V的对应分量为1,则每个分量的值为1,否则为1或2.基于此,这是一个功能,可以做你想要的. def doppelstring(s): letter_groups = ((val,list(group)) for val,group in itertools.groupby(s)) max_vector = ((val,min(len(group),2)) for val,group in letter_groups) vector_components = ([dim * (l + 1) for l in range(maxlen)] for dim,maxlen in max_vector) return [''.join(letters) for letters in itertools.product(*vector_components)] 这是一个使用切片的更紧凑的版本.它的可读性可能稍差,但至少它保持在78-char范围内: def doppelstring(s): max_vs = (''.join(itertools.islice(g,2)) for k,g in itertools.groupby(s)) components = ([s[:l + 1] for l in range(len(s))] for s in max_vs) return [''.join(letters) for letters in itertools.product(*components)] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |