我正在尝试使用Python中的正则表达式删除只有单个重复字符的单词,例如:
good => good
gggggggg => g
我尝试过的是以下内容:
re.sub(r'([a-z])\1+', r'\1', 'ffffffbbbbbbbqqq')
以上解决方案存在问题,它会将good
更改为god
,而我只想删除具有单个重复字符的单词。
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"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']
如果您不想在方法中使用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
说明:
mmmmmm => m
aaaaaaa => a
。 - Hrithik Puri