Python 3.x Regx:查找第一个不重复的连续字符
请检查要求,这不是重复的问题。 需要使用Regx找出charecter的第一个非重复连续出现Python 3.x Regx:查找第一个不重复的连续字符,python-3.x,Python 3.x,请检查要求,这不是重复的问题。 需要使用Regx找出charecter的第一个非重复连续出现 Str1="aabbcdde" output:- c str2="abbccddee" Output:- a 您可以使用将字符组合在一起,然后计算这些组的长度,在找到长度为1的组时停止 from itertools import groupby def non_repeating(s): for k, g in groupby(s): if sum(1 for _ in
Str1="aabbcdde"
output:- c
str2="abbccddee"
Output:- a
您可以使用将字符组合在一起,然后计算这些组的长度,在找到长度为1的组时停止
from itertools import groupby
def non_repeating(s):
for k, g in groupby(s):
if sum(1 for _ in g) == 1: # This can probably be improved
return k
return None # Or whatever failure value is appropriate
编辑:
这是一个函数,它使用一些迭代器并测试它是否为一个元素长,消耗其中的一部分
from itertools import groupby
def is_one(g):
try:
next(g) # Has a first element, should succeed
except StopIteration:
return False # Empty iterator
try:
next(g) # Has a second element should fail
except StopIteration:
return True # There was only one element
return False # There was more than one element
def non_repeating(s):
for k, g in groupby(s):
if is_one(g):
return k
return None # Or whatever failure value is appropriate
以下正则表达式可用于删除重复的字母
preg_replace("/(?<first>[a-z]+)(\k<first>)/", "", $input_lines);
preg_replace(“/(?[a-z]+)(\k)/”,“,$input_行);
然后,您可以拉出第一个字母(因为您的第一个示例有两个不重复的字母)。在上测试,我不使用python编写代码,但我知道这个正则表达式可以捕获任何重复的字符匹配。如果只想捕获单词,可以将
调整为\w
:
您可以将所有匹配项替换为空字符串,然后字符串的第一个字符是第一个
非重复的单词一些re
解决方案-它不查找未重复的字符,而是删除重复的字符
重新导入
str1=“aabbcdde”
str2=“abbcddee”
打印(str1)
对于re.sub(r“()\1+”、“”和str1)中的el:
打印(el)
打印(str2)
对于re.sub(r“()\1+”、“”和str2)中的el:
打印(el)
产出:
aabbcdde
C
E
阿卜卡迪
A.
这个解决方案是用python编写的吗?我说的是使用python的re模块的解决方案。对不起,你说的是python,我听到的是PHP。谢谢Patrick!!我知道g将有所有相同连续字符的列表,但不理解sum(1表示g中的uu)==1,您能解释一下吗?g
是一个iterable,在我们遍历它时会被使用。这基本上是穷人的len(g)
,因为itertools.\u grouper
对象不支持len
。这是不完美的,因为即使我们知道答案会大于1,我们也会继续计算,但改进后的版本会很难阅读,而且这个版本也不会太低效如果我们想要一个可读的提前停止方法,可以使用islice,无论是否使用next中的列表(k代表k,g在groupby中,如果len(list(islice(g,2))==1)
或以1s之和。(当然,在现实世界中,我们只是花了更长的时间来思考这个问题,而不是我们可能节省的时间。:-)你真的尝试过吗?它不起作用-它将匹配每一个唯一的字符,只包括重复字符的最后一个重复,因为它们不会被自身跟随。我指的是您发布的前一个版本tbh;)
(\w)\1+
this regex means: match all characters repeated