Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串替换为相互包含的字符_Python_Replace - Fatal编程技术网

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

现在,如果输入是byay,它将给出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。我想我理解你想要什么。正则表达式会处理这个问题,因为字符串中的两个“匹配项”不会重叠,并且所有字符都会一次性被替换,因此一次替换的“结果”不会再次被替换。