【发布时间】:2018-02-11 04:22:36
【问题描述】:
我在文档中有这些测量值
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 厘米。
到目前为止,我的代码如下,但它不能正常工作
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', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''),
【问题讨论】:
-
定义“不能正常工作”:它做什么与它应该做什么?示例将是最受欢迎的。
-
请展示并解释你得到的输出和你想要的输出之间的区别。
-
您必须做的一件事是摆脱捕获组。但是,您应该在连接后检查final pattern,它只有returns numbers only。
-
检查对您的“非捕获组”目标的帮助
(?:blabla),这可能有助于纳入 Wiktors 评论。 -
非常感谢@WiktorStribiżew,它的速度如此之快,解决了我的大部分问题。最终我的目标是提取文本中的所有测量值,因此我也需要提取它们的单位。我的计划是将所有内容提取为“5.3 x 2.5 cm”之类的字符串。 1)有意义吗? 2)我该怎么做,有什么建议吗?
标签: python regex units-of-measurement