Python 3.x 如何检测字符串中的元音,如果某个特定字母位于元音旁边,它也被视为字符串?

Python 3.x 如何检测字符串中的元音,如果某个特定字母位于元音旁边,它也被视为字符串?,python-3.x,for-loop,if-statement,while-loop,Python 3.x,For Loop,If Statement,While Loop,使用一个函数来检测给定字符串中是否有元音,还可以检查字母“g”是否在元音旁边。如果字母“g”在元音旁边,那么它也将被视为元音。我确实发布了一个类似的问题,得到了一个几乎有效的答案,但我没有得到关于如何做的解释,也没有人回复我要求澄清的评论 以下是函数: import re def disemvowel(text): result = re.sub(r"G[AEIOU]+|[AEIOU]+G|[AEIOU]+", "", text, flags=re.IGNORECASE)

使用一个函数来检测给定字符串中是否有元音,还可以检查字母“g”是否在元音旁边。如果字母“g”在元音旁边,那么它也将被视为元音。我确实发布了一个类似的问题,得到了一个几乎有效的答案,但我没有得到关于如何做的解释,也没有人回复我要求澄清的评论

以下是函数:

    import re


def disemvowel(text):
    result = re.sub(r"G[AEIOU]+|[AEIOU]+G|[AEIOU]+", "", text, flags=re.IGNORECASE)
    print(result)


disemvowel("fragrance")
# frrnc

disemvowel('gargden')
# rgdn

disemvowel('gargdenag')
# rgdn
此函数适用于大多数情况,但字母“g”在元音之前或超过元音时除外。例如,当我输入'gag'时它不工作,当它不应该返回任何东西时它返回'g'。我只需要澄清一下这个函数是如何工作的,以及我可以对它进行哪些编辑以使它在所有情况下都能正常运行

这是我最初使用的函数,但它只适用于元音,因为我不知道如何添加一个条件,在元音旁边检测字母“g”:

def disemvowel(text):
text = list(text)
new_letters = []
for i in text:
    if i.lower() == "a" or i.lower() == "e" or i.lower() == "i" or i.lower() == "o" or i.lower() == "u":
        pass
    else:
        new_letters.append(i)
print (''.join(new_letters))

disemvowel('fragrance')
# frgrnc
有两种方法

import re
def methodA(txt,ii):

    vowels = ['a', 'e', 'i', 'o', 'u']
    txt = re.sub('g'+ vowels[ii] +'g' ,' ', txt) # remove strings like gug
    txt = re.sub(vowels[ii] + 'g', ' ', txt) # remove strings like ug
    txt = re.sub('g' + vowels[ii] , ' ', txt) # remove strings like gu

    if (ii == len(vowels)-1 or txt == '' or txt == ' ') : # if string is empty or all vowels have been used
        txt = "".join( list(filter(lambda x:x not in ['a', 'e', 'i', 'o', 'u'], list(txt)))) # finally remove all vowels
        txt = re.sub(' ', '', txt)
        return txt
    ii = ii + 1
    return methodA(txt, ii) # call the function with next vowel in the list
ans=methodA(“香水”,0)#用第零个元音初始化

frrnc ans=方法B(“香味”)


frrnc以下是此任务的解决方案:

def disemvowel(text):
    return re.sub(r"G?[AEIOU]+G?", "", text, flags=re.IGNORECASE)


tests = {"fragrance": "frrnc", "gargden": "rgdn", "gargdenag": "rgdn", "gag": ""}

for test, value in tests.items():
    assert disemvowel(test) == value

print("PASSED")
def disemvowel(text):
    return re.sub(r"G?[AEIOU]+G?", "", text, flags=re.IGNORECASE)


tests = {"fragrance": "frrnc", "gargden": "rgdn", "gargdenag": "rgdn", "gag": ""}

for test, value in tests.items():
    assert disemvowel(test) == value

print("PASSED")