Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/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以最佳速度仅删除word中的双字母序列_Python_Regex_String - Fatal编程技术网

使用python以最佳速度仅删除word中的双字母序列

使用python以最佳速度仅删除word中的双字母序列,python,regex,string,Python,Regex,String,查找/替换字符串中的双字母的非常流行的任务。但存在一个解决方案,您可以通过几个步骤来删除双字母。例如,我们有字符串“skalallapenndraaa”,在替换了双字母之后,我们需要进入输出“skalpendra”。我试着解决这个问题 re.sub(r'([a-z])\1+', r'\1', "skalallapennndraaa") ,但这不会删除字符串中的所有双字母(结果-“skalalapendra”)。如果我使用r'作为第二个参数,我得到了一个密切相关的结果“skalaapendr”,

查找/替换字符串中的双字母的非常流行的任务。但存在一个解决方案,您可以通过几个步骤来删除双字母。例如,我们有字符串
“skalallapenndraaa”
,在替换了双字母之后,我们需要进入输出
“skalpendra”
。我试着解决这个问题

re.sub(r'([a-z])\1+', r'\1', "skalallapennndraaa")

,但这不会删除字符串中的所有双字母(结果-
“skalalapendra”
)。如果我使用
r'
作为第二个参数,我得到了一个密切相关的结果
“skalaapendr”
,但我仍然找不到替换参数的正确正则表达式。有什么想法吗?

您可以使用此双重替换:

>>> s = 'skalallapennndraaa'
>>> print re.sub(r'([a-z])\1', '', re.sub(r'([a-z])([a-z])\2\1', '', s))
skalpendra
([a-z])([a-z])\2\1
将删除所有类型的案例,而
([a-z])\1
将删除剩余的双字母


更新:根据下面的评论,我意识到基于循环的方法是最好的。这是:

>>> s = 'nballabnz'
>>> while re.search(r'([a-z])\1', s):
...     s = re.sub(r'([a-z])\1', '', s)
...
>>> print s
z

您可以使用此双重替换:

>>> s = 'skalallapennndraaa'
>>> print re.sub(r'([a-z])\1', '', re.sub(r'([a-z])([a-z])\2\1', '', s))
skalpendra
([a-z])([a-z])\2\1
将删除所有类型的案例,而
([a-z])\1
将删除剩余的双字母


更新:根据下面的评论,我意识到基于循环的方法是最好的。这是:

>>> s = 'nballabnz'
>>> while re.search(r'([a-z])\1', s):
...     s = re.sub(r'([a-z])\1', '', s)
...
>>> print s
z

您需要多次运行正则表达式,直到不替换任何内容为止。替换参数中存在问题,因为在需要删除双字母的地方,r'\1'会留下一个字母,但我需要同时删除两个(且仅删除2个)字母,不是3或任何其他数字。您需要多次运行正则表达式,直到不替换任何内容为止。替换参数中存在问题,因为在需要删除双字母的位置,r'\1'会留下1个字母,但我需要同时删除两个(且仅删除2个)字母,而不是3或任何其他数字。在替换双字母后,我们需要进入输出“斯卡拉潘德拉“。您有
skalpendra
作为输出。似乎正是我需要的。非常感谢。这是我在描述中的错误,输出是正确的。适用于该示例,但一般情况下,您需要继续应用正则表达式,直到结果停止更改,而不仅仅是两个周期。@anubhava-这一点很好!你必须走得相当远。。。比如“nballabn”。在替换了双字母之后,我们需要输入输出“skalapendra”。您有
skalpendra
作为输出。这似乎正是我需要的。非常感谢。这是我在描述中的错误,输出是正确的。适用于该示例,但一般情况下,您需要继续应用正则表达式,直到结果停止更改,而不仅仅是两个周期。@anubhava-这一点很好!你必须走得相当远。。。像“nballabn”。