检查字符串是否包含set中的任何字符

时间:2018-11-21 23:25:50

标签: python

实际上,我正在处理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('')

3 个答案:

答案 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)