[英]Regex exact match
我有以下句子:“饭盒的尺寸大约是 1.5l 或 1500ml”
我怎样才能将其更改为:“饭盒的大小约为 1.5 升或 1500 毫升”
在某些情况下,该值也可能显示为带空格的“1.5 l 或 1500 ml”。
当我试图构建一个函数时,我无法捕获“l”或“ml”,或者它给我一个转义错误。
我试过:
def stnd(text):
text = re.sub('^l%',' liter', text)
text = re.sub('^ml%',' milliliter', text)
text = re.sub('^\d+\.\d+\s*l$','^\d+\.\d+\s*liter$', text)
text = re.sub('^^\d+\.\d+\s*ml$%','^\d+\.\d+\s*milliliter$', text)
return text
您可以使用字典列出所有单位作为键,并使用模式查找后跟ml
或l
的数字,然后您可以将其用作字典的键以获取值。
(?<=\d)m?l\b
模式匹配:
(?<=\d)
正向后视,向左断言一个数字m?l\b
匹配可选的m
后跟 b 和单词边界请参阅正则表达式演示。
例子
s = "The size of the lunch box is around 1.5l or 1500ml"
pattern = r"(?<=\d)m?l\b"
dct = {
"ml": "milliliter",
"l": "liter"
}
result = re.sub(pattern, lambda x: " " + dct[x.group()] if x.group() in dct else x, s)
print(result)
输出
The size of the lunch box is around 1.5 liter or 1500 milliliter
我们可以使用查找值和替换的字典来处理这个替换。
d = {"l": "liter", "ml": "milliliter"}
inp = "The size of the lunch box is around 1.5l or 1500ml"
output = re.sub(r'(\d+(?:\.\d+)?)\s*(ml|l)', lambda m: m.group(1) + " " + d[m.group(2)], inp)
print(output)
# The size of the lunch box is around 1.5 liter or 1500 milliliter
def stnd(text):
return re.sub(r'(\d+(?:\.\d+)?)\s*(m?l)', lambda m: m.group(1) + " " + d[m.group(2)], text)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.