用包含在彼此中的字符替换字符串字符

时间:2016-06-21 13:55:46

标签: python replace

好的就是这个问题。

if any(char in word for char in ["a", "ā", "e", "ē", "i", "ī", "u", "ū", "o", "ai", "ei", "ui"]):
for ch in ["a", "ā", "e", "ē", "i", "ī", "u", "ū", "o", "ai", "ei", "ui"]:
    if ch in word:
       word = word.replace(ch, ch + "p" + ch)

这可能看起来有点奇怪,但它适用于拉脱维亚语译者俚语。     我知道发现元音可能会更有效地完成,但我的问题是我希望它不要采取,例如,如果ei在那里,“ei”中的“i”。现在它需要例如“aiza”并提供“apaipaipizapa”而不是首选的“aipaizapa”。希望这没有被问过太多次,英语不是我的母语所以我不知道如何制定有效的搜索词。     提前谢谢。

编辑:我担心我的问题很糟糕。我需要的是什么 所以,这是示例

list = ["a", "b", "ay", "by"] 
state = input("Type a, b, ay or by")
for char in list
    if char in state
        state = state.replace(char, k)
print state

现在,如果输入是 ay ,它会给出 kk ,但是我需要它来提供一个 ķ即可。如果它是较大值的一部分,我如何实现Python 3忽略较小的值?

2 个答案:

答案 0 :(得分:2)

您可以使用|将这些字符加入正则表达式。确保首先对多字符部分进行排序,因此它们在匹配中是首选(即它匹配ai而不是a,然后匹配i)。然后使用带有回调函数的re.sub

>>> chars = ["a", "ā", "e", "ē", "i", "ī", "u", "ū", "o", "ai", "ei", "ui"] 
>>> s = "aiza"
>>> p = "|".join(sorted(chars, key=len, reverse=True))
>>> print(p)
ā|ē|ī|ū|ai|ei|ui|a|e|i|u|o
>>> re.sub(p, lambda m: "{0}p{0}".format(m.group()), s)
'aipaizapa'

正则表达式匹配是非重叠的,因为它一次替换所有字符,并且一个接一个地替换,所以作为其他字符一部分的字符不会有问题。

答案 1 :(得分:0)

你的代码不是python3,但是根据我从你的第二个例子中所理解的,试试这个:

list1 = ["a", "b", "ay", "by"] 
state = input("Type a, b, ay or by: ")

for char in state:
    if char in list1:
        print("k")
        break