Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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中连续出现N次以上的字母_Python_Text - Fatal编程技术网

Python:删除word中连续出现N次以上的字母

Python:删除word中连续出现N次以上的字母,python,text,Python,Text,假设我有一句话: sentence = "Eveeery mondayyy I waaake upp" 我想创建一个函数,删除一个单词中连续出现N次以上的所有字母 所以,如果我说:N=2 结果应该是: result = Eveery mondayy I waake upp 我如何才能高效地完成这项工作?为您提供一个良好的开端: 只需发布一个可能对您有所帮助的示例: import re regex = r"(.)\1+" test_str = "sentence = Eveeery monda

假设我有一句话:

sentence = "Eveeery mondayyy I waaake upp"
我想创建一个函数,删除一个单词中连续出现N次以上的所有字母

所以,如果我说:N=2 结果应该是:

result = Eveery mondayy I waake upp

我如何才能高效地完成这项工作?

为您提供一个良好的开端: 只需发布一个可能对您有所帮助的示例:

import re
regex = r"(.)\1+"
test_str = "sentence = Eveeery mondayyy I waaake upp"
# use \\1\\1 if you need to replace with two characters and so on 
subst = "\\1"
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0)
if result:
    print (result)
输出:

>>>Every monday I wake up

希望这对你有所帮助

你必须重复这个句子的字母,同时对上一个字母进行跟踪,以及看到了多少次

def del_n(n, s):
    so_far = 1
    previous = s[0]
    res = [s[0]]

    for idx, c in enumerate(s[1:]):
        if c == previous:
            so_far += 1
            if so_far >= n+1:
                continue
        else:
            previous = c
            so_far = 1
        res.append(c)
    return ''.join(res)


sentence = "Eveeery mondayyy I waaake upp"
del_n(2, sentence)
输出:
re.sub()
解决方案:

import re

def remove_continued_char(s, n):
    pat = re.compile(r'([a-z])(\1{' + str(n) + '})')
    return pat.sub('\\2', s)

sentence = 'Eveeery mondayyy I waaake upp'
print(remove_continued_char(sentence, 2))
输出:

Eveery mondayy I waake upp

  • [a-z]
    -仅匹配字母字符(字母)
  • \1
    -返回到第一个捕获的组,即
    ([a-z])
  • \\2
    -指向第二个捕获(括号内)的组值

您可以在不导入任何外部模块的情况下使用功能尝试此操作:

sentence = "Eveeery mondayyy I waaake upp"



def no_dublicate(senten,N):
    final=[]
    for word in senten.split():
        track=[]
        for chara in word:
            track.append(chara)
            if track.count(chara)>N:
                track.remove(chara)


        final.append(track)

    return ' '.join(["".join(item) for item in final])


print(no_dublicate(sentence,2))
输出:

Eveery mondayy I waake upp

请发布您迄今为止尝试过的工作示例,因此s编码服务效率不高:开始编码,向我们显示不起作用的代码。低效:等待SO解决您的问题您的条件“删除所有出现N次以上的字母”肯定与您的最终输出相矛盾
Eveery
->
Eveery
-表示“删除”一个,但不是全部我将添加一些代码并重新表述我的sentence@totyped:是的,最好在外面变冷之前做好你的家庭作业:)regex everything?@ReblochonMasque:edit:在subst上方添加了一行注释以满足条件非常感谢!你能给我解释一下subst.实际上是做什么的吗?@totyped:它用前面提到的替换来替换regex的出现,更多信息请参阅very nice!!谢谢。你介意在回答中解释一下,如何捕捉群体价值观吗?我从来没用过。@totyped,不客气。这是基本的正则表达式理论,太棒了!非常感谢你的链接!
Eveery mondayy I waake upp