Python 将字符串替换为相互包含的字符
好的,这就是问题所在Python 将字符串替换为相互包含的字符,python,replace,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)
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”为例,给出了“apapizapa”,而不是首选的“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
现在,如果输入是by或ay,它将给出kk,但我需要它给出一个k。如果较小的值是较大值的一部分,如何实现Python 3而忽略较小的值?您可以使用
|
将这些字符连接到正则表达式。确保首先对多字符部分进行排序,以便在匹配中优先使用它们(即,它匹配ai
,而不是a
,然后匹配i
)。然后与回调函数一起使用:
>>> 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'
正则表达式匹配是不重叠的,因为它一次替换所有字符,并且一个接一个地替换,所以属于其他字符的字符不会成为问题。您的代码不是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
是的,但当我换掉长的,它穿过小的,它仍然在新的“eipei”或其他什么地方找到它们。我需要一种方式来表示,如果i在ei中,则不要替换。@jornsharpe您能将这段代码稍微分解一下,使其更易于理解吗?很抱歉,我在编码方面有点新手,尤其是python。我想我理解你想要什么。正则表达式会处理这个问题,因为字符串中的两个“匹配项”不会重叠,并且所有字符都会一次性被替换,因此一次替换的“结果”不会再次被替换。