Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Regx:查找第一个不重复的连续字符_Python 3.x - Fatal编程技术网

Python 3.x Regx:查找第一个不重复的连续字符

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

请检查要求,这不是重复的问题。 需要使用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 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