我想构建一个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))
试试这个:
输出:
你可以试试这个:
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
Python demo
相关问题 更多 >
编程相关推荐