好的就是这个问题。
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忽略较小的值?
答案 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