我有一本字典,例如:
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.compile
和sub
方法找到匹配的子字符串并替换它们。这里的想法是通过使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句