如何删除重复的单个字符?

2024-09-30 03:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python中的regex删除具有单个重复字符的单词,例如:

good => good
gggggggg => g

到目前为止我试过的是

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

上述解决方案的问题是它改变了good to god,我只想删除具有单个重复字符的单词。你知道吗


Tags: tore解决方案字符单词regexgoodgod
3条回答

可以使用trim命令:

请看以下示例:

"ggggggg".Trim('g');

更新: 对于位于字符串中间的字符,请使用此函数,这要归功于this answer

在java中:

public static string RemoveDuplicates(string input)
{
    return new string(input.ToCharArray().Distinct().ToArray());
}

在python中:

used = set()
unique = [x for x in mylist if x not in used and (used.add(x) or True)]

但我认为所有这些答案都不符合像aaaaabbbbbcda这样的情况,这个字符串在字符串的末尾有一个a,它不会出现在结果(abcd)。对于这种情况,使用我写的函数:

输入:

def unique(s):
    used = set()
    ret = list()
    s = list(s)
    for x in s:
        if x not in used:
            ret.append(x)
            used = set()

        used.add(x)

    return ret

print(unique('aaaaabbbbbcda'))

输出:

['a', 'b', 'c', 'd', 'a']

这里更好的方法是使用set

def modify(s):

    #Create a set from the string
    c = set(s)

    #If you have only one character in the set, convert set to string
    if len(c) == 1:
        return ''.join(c)
    #Else return original string
    else:
        return s

print(modify('good'))
print(modify('gggggggg'))

如果你想使用regex,在regex中用^$标记字符串的开始和结束(灵感来自@bobblebubble comment)

import re

def modify(s):

    #Create the sub string with a regex which only matches if a single character is repeated
    #Marking the start and end of string as well
    out = re.sub(r'^([a-z])\1+$', r'\1', s)
    return out

print(modify('good'))
print(modify('gggggggg'))

输出将是

good
g

如果您不想在方法中使用set,那么应该这样做:

def simplify(s):
  l = len(s)
  if l>1 and s.count(s[0]) == l:
    return s[0]
  return s

print(simplify('good'))
print(simplify('abba'))
print(simplify('ggggg'))
print(simplify('g'))
print(simplify(''))

输出:

good
abba
g
g

解释:

  • 计算字符串的长度
  • 计算与第一个字符相等的字符数,并将计数与初始字符串长度进行比较
  • 根据结果返回第一个字符或整个字符串

相关问题 更多 >

    热门问题