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

4

我正在尝试使用Python中的正则表达式删除只有单个重复字符的单词,例如:

good => good
gggggggg => g

我尝试过的是以下内容:
re.sub(r'([a-z])\1+', r'\1', 'ffffffbbbbbbbqqq')

以上解决方案存在问题,它会将good更改为god,而我只想删除具有单个重复字符的单词。


2
你不能使用正则表达式来确定一个单词是否在字典中。这是不可能的。 - T Tse
问题已更新。 - Hrithik Puri
1
我的意思是我想删除只有单个重复字符的单词,例如 mmmmmm => m aaaaaaa => a - Hrithik Puri
1
单个字母组成的单词像这样?只需在您的模式中添加单词边界即可。 - bobble bubble
1
是的,一个单词边界或字符串的开头和结尾标记应该可以完成这个任务。 - Devesh Kumar Singh
显示剩余12条评论
3个回答

4
一个更好的方法是使用一个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'))

如果你想要使用正则表达式,在我们的正则表达式中用^$标记字符串的开头和结尾(受@bobblebubble评论的启发)

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 的甜蜜方法! - Allan

2
你可以使用trim命令:
看看这些例子:
"ggggggg".Trim('g');

更新:

对于字符串中间的字符,请使用以下函数,感谢这个回答

在Java中:

Original Answer翻译成"最初的回答"

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)中。对于这种情况,请使用我编写的以下函数:

In:

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'))

out:

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

嘿,感谢您的贡献,但我不想修剪只有 'g' 的内容。 - Hrithik Puri
这是Java吗?但问题标记为Python。 - Devesh Kumar Singh
我添加了Python代码并纠正了一些错误答案。 - Chapyar

2

如果您不想在方法中使用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

说明:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接