实际上,我正在处理SPOJ的任务。如何检查字符串是否包含集合中的任何字符,但是不能删除出现集合中的字符的字符串中的第一个字符。
F.e。 有一个字符串
word = "anAconda_elEphant"
和一组元音:
vowels = set('aeiouyAEIOUY')
我想要一个字符串
word = "ancnd_lphnt"
当set中任何字符的出现等于1时,此方法应返回True。我知道方法 .count()的参数必须为str,而不是set。
if word.count(vowels) == 1:
for char in word[char_pos:]:
if char in vowels:
char.replace('')
答案 0 :(得分:1)
只需使用正则表达式
import re
word = "anAconda_elEphant"
# use a "lookbehind" to make sure there is at least one character in front of this character...
print(re.sub("(?<=.)[aeiouyAEIOUY]",'',word))
# 'ancnd_lphnt'
如前所述,如果您希望它跳过集合的第一个匹配项而不是第一个字母,那么您将需要一个不同的解决方案
print(re.sub("(?<=.)[aeiouyAEIOUY]",'',"bace"))
# 'bc' # a is not the FIRST letter so it is replaced
最简单的方法是将其分为两个步骤 首先在第一个匹配项上拆分字符串
word = "bace"
splitted_string = re.split("(.*?[aeiouyAEIOUY])",word,1)
# you will notice we have an extra empty string at the beginning of our matches ... so we can skip that
lhs,rhs = splitted_string[1:]
# now just run a simple re.sub on our rhs and rejoin the halves
print(lhs + re.sub("[aeiouyAEIOUY]",'',rhs))
# results in "bac"
答案 1 :(得分:0)
您可以如下使用for
循环。这个想法是建立一个列表,并在遇到vowels
中的字符时使用标记来标记。
word = "anAconda_elEphant"
vowels = set('aeiouyAEIOUY')
flag = False
L = []
for ch in word:
if (ch not in vowels) or (not flag):
L.append(ch)
if ch in vowels:
flag = True
word = ''.join(L)
print(word)
ancnd_lphnt
答案 2 :(得分:0)
print(vowels.intersection(word))
https://docs.python.org/3/library/stdtypes.html#frozenset.intersection