Regex提取整数或浮点值,后跟一个单位Python

2024-09-24 22:31:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想构建一个regex,它捕获字符串中的所有模式,其中整数或浮点数在度量单位(ml、mg、kg等)之前。我现在的正则表达式只考虑整数和有空格时的中断。我想在我的代码中处理这些。你知道吗

p = re.compile('[0-9](?:mg|kg|ml|q.s.|ui|M|g|µg)')
x = '0.9mg is the approximate dosage'
z = p.findall(x)
print(z)

它不适用于小数,当有空格时也会中断。你知道吗

要捕获的预期模式包括:

Examples: 0.9 mg, 9 mg, 9mg, 0.9mg

有什么帮助吗

在代码中使用正则表达式:

mg = []
newregex = r"[0-9\.\s]+(?:mg|kg|ml|q.s.|ui|M|g|µg)" 
for s in zz:
    for e in extracteddata:
        v = re.search(newregex,extracteddata,flags=re.IGNORECASE|re.MULTILINE)
        if v:
            mg.append(v.group(0))

Tags: 字符串代码inreuifor模式整数
3条回答

试试这个:

x = '9mg 9.0mg  0 mg .009 mg is the approximate dosage'
p = re.compile('[0-9\.\s]+(?:mg|kg|ml|q.s.|ui|M|g|µg)')
p.findall(x)

输出

['9mg', ' 9.0mg', '  0 mg', ' .009 mg']

你可以试试这个:

([.\d]+)\s*(?:mg|kg|ml|q.s.|ui|M|g|µg)

Try it online.

(?<!\d|\.)\d+(?:\.\d+)?\s*?(?:mg|kg|ml|q\.s\.|ui|M|g|µg)(?!\w)

这个正则表达式将选择格式正确的数字,后面有格式正确的单位,并拒绝格式错误的数字或不存在的单位。你知道吗

  • (?<!\d|\.)-确保这个数字前面没有数字或小数点。你知道吗
  • \d+-获取一个或多个数字。你知道吗
  • (?:\.\d+)?-可选地获取一个小数点,后跟一个或多个数字。你知道吗
  • \s*?-获取零到无限的空白字符,尽可能少。你知道吗
  • (?:mg|kg|ml|q\.s\.|ui|M|g|µg)-捕获列出的单元之一。你知道吗
  • (?!\w)-确保捕获的单元后面没有额外的数据。你知道吗

Regex demo


import re

p = re.compile('(?<!\d|\.)\d+(?:\.\d+)?\s*?(?:mg|kg|ml|q\.s\.|ui|M|g|µg)(?!\w)')
x = 'Examples: 0.9 mg, 9 mg, 9mg, 0.9mg'

print(p.findall(x))

['0.9 mg', '9 mg', '9mg', '0.9mg']

Python demo

相关问题 更多 >