有效地找到并替换模式' n' +(辅音)

时间:2017-04-10 14:53:52

标签: python replace

我确信这很简单,但我是一个完全的初学者。我试图制作一个工具,我有一个字符串并搜索' n' + [任何辅音]并将其替换为辅音加倍 - 例如

aaanq - > aaaqq。

我唯一能想到的就是你在下面看到每个可能的nC组合的单独案例。有一个更好的方法吗?

nC_test = input('Enter word: ')

if 'nq' in nC_test:
    print('nC pattern found ')
    nC_test = nC_test.replace('nq', 'qq')
    print(nC_test)

1 个答案:

答案 0 :(得分:1)

python中的字符串是不可变的,所以如果你想修改它们只需将它们转换成一个列表:

my_list = list(my_string)

然后创建一个辅助函数来检查一个角色是否是一个辅音。

这可以通过多种方式完成,您也可以查看大写字母,特殊辅音(西班牙语ñ),因此可以随意实现此功能,以满足您的需求:

def is_consonant(character):
    consonants = ['b','c',...,'z']   # complete the list yourself
    if character in consonants:
        return True
    else:
        return False

然后迭代你的字符串并检查string [i]是'n'并且字符串[i + 1]是辅音的位置。

for i in range(len(my_list)-1): 
    if my_list[i] == 'n' and is_consonant(my_list[i+1]):
        print('nC pattern found ')
        my_list[i] = my_list[i+1]  

请注意,我们不会迭代到最后一个元素,但直到倒数第二个元素,所以我们可以安全地执行my_list [i + 1]。

如果你需要一个字符串,只需将列表转换回字符串:

my_string = ''.join(my_list)

注意:如果您有两个连续的n后跟一个辅音,请考虑重叠的情况可能会产生不良结果:

annq --> annq --> anqq

这里第一个n后跟一个辅音(n),然后第一个n被第二个n替换(没有有效的变化)。然后下一个循环看到“nq”并将其更改为“qq”,但结果字符串包含“nq”作为结果。

我不知道你是否考虑过这种情况,只是考虑一下。因此,如果您的结果不应包含任何n后跟辅音,那么您将不得不考虑这种情况。