gpt4 book ai didi

python - 如何在 python 中使用正则表达式替换字符串的多个单词?

转载 作者:行者123 更新时间:2023-12-05 06:11:37 28 4
gpt4 key购买 nike

我有一本像这样的字典:

dic = { "xl": "xlarg", "l": "larg",'m':'medium'}

我想使用 re.sub 或类似的方法找到 dic.keys 中的任何字符串(包括单个字母)并将其替换为键的值。

def multiple_replace(dict, text):
# Create a regular expression from the dictionary keys
regex = re.compile("(%s)" % "|".join(map(re.escape, dict.keys())))

# For each match, look-up corresponding value in dictionary
return regex.sub(lambda mo: dict[mo.string[mo.start():mo.end()]], text)

它适用于字符串中的单个字母,例如它将大小 m 更改为中号,但它也会更改单词中的字母,例如将星期一更改为 mediumonday

谢谢

最佳答案

您可以使用 re.compilesub方法来查找匹配的子字符串并替换它们。这里的想法是使用 OR 语句 | 将所有键连接到一个模式中。 .对于每个匹配项,您然后使用匹配的子字符串来查找替换字典。

除此之外,您还可以使用后向和先行正则表达式。对于后视,您希望它不是一个词 (?<!\w) .对于前瞻,您希望它也不是单词 (?!\w) .

综合起来,我们有:r"(?<!\w)(xl|l|m)(?!\w)"

这是一个例子:

def replace_substrings(s, d):
p = "|".join(d.keys())
p = r"(?<!\w)(" + p + r")(?!\w)"
return re.compile(p).sub(lambda m: d[m.group(0)], s)
...


dic = {"xl": "xlarg", "l": "larg",'m':'medium'}
inputs = [
"size m",
"monday",
"xl sell",
"m size m l xl",
]

for input in inputs:
print(replace_substrings(input, dic))

这将输出:

size medium
monday
xlarg sell
medium size medium larg xlarg

关于python - 如何在 python 中使用正则表达式替换字符串的多个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63913094/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com