繁体   English   中英

正则表达式精确匹配

[英]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

您可以使用字典列出所有单位作为键,并使用模式查找后跟mll的数字,然后您可以将其用作字典的键以获取值。

(?<=\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM