gpt4 book ai didi

python - 正则表达式获取测量值

转载 作者:太空狗 更新时间:2023-10-30 02:26:09 25 4
gpt4 key购买 nike

我在文档中有这些测量结果

5.3 x 2.5 cm
11 x 11 mm
7 mm
13 x 12 x 14 mm
13x12cm

我需要使用 python 使用正则表达式提取 5.3 x 2.5 cm。

到目前为止我的代码在下面但是它不能正常工作

x = "\.\d{1,2}|\d{1,4}\.?\d{0,2}|\d{5}\.?\d?|\d{6}\.?"
by = "( )?(by|x)( )?"
cm = "(mm|cm|millimeter|centimeter|millimeters|centimeters)"
x_cm = "((" + x + " *(to|\-) *" + cm + ")" + "|(" + x + cm + "))"
xy_cm = "((" + x + cm + by + x + cm + ")" +"|(" + x + by + x + cm + ")" +"|(" + x + by + x + "))"
xyz_cm = "((" + x + cm + by + x + cm + by + x + cm + ")" + "|(" + x + by + x + by + x + cm + ")" + "|(" + x + by + x + by + x + "))"
m = "((" + xyz_cm + ")" + "|(" + xy_cm + ")" + "|(" + x_cm + "))"
a = re.compile(m)
print a.findall(text)

它给出的输出:

[('13', '13', '13', '13', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('12', '12', '12', '12', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('4', '4', '4', '4', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('25', '25', '25', '25', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),

最佳答案

使用 Regex,您应该始终慢慢地建立您的表达式以获得您想要的内容。例如

s = "5.3 x 2.5 cm"

您想在这里找到数字吗?

re.findall("\d+", s)

给你所有的整数:

["5", "3", "2", "5"]

好的,如果您的数字可以是 float 但不一定是 float 怎么办。然后你用一个非捕获匹配组扩展你的表达式,这个匹配组有一个点,后面可能还有一些数字。

re.findall("\d+(?:\.\d*)?", s)

这给了你

["5.3", "2.5"]

然后你可以用任意数量的空格进行乘法:

re.findall("(\d+(?:\.\d*)?)\s*x\s*(\d+(?:\.\d*)?)", s)

现在将数字放在匹配组中会得到一个元组。

[("5.3", "2.5")]

然后您可以继续学习这些单元:

re.findall("(\d+(?:\.\d*)?)\s*x\s*(\d+(?:\.\d*)?)\s*(cm|mm)", s)

给你你想要的元组:

[("5.3", "2.5", "cm")]

等等。

如果您像这样构建您的正则表达式,您就有机会看到从一个更改到下一个更改有什么中断。调试像您上面发布的那样的巨大正则表达式是一项不值得去做的任务。

我不会将我的单元正则表达式命名为 cm,这对于将来维护您的代码的任何人来说都是相当困惑的。除此之外,您需要对要允许的数字格式有一些明确的要求。也许有人会输入科学计数法等。您的正则表达式将变得非常复杂。

关于python - 正则表达式获取测量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46011480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com