正则表达式提取数字维度

时间:2017-06-14 22:36:00

标签: python regex csv numbers data-processing

我使用python正则表达式从数据库中提取维度信息。该列中的条目如下所示:

23 cm
43 1/2 cm

20cm
15 cm x 30 cm

我需要的只是条目的宽度(因此对于带有' x'的条目,只有第一个数字),但正如您所看到的那样,这些值到处都是。

根据我在documentation中的理解,您可以使用他们的位置访问匹配中的组,因此我认为我可以根据返回的组数和找到的内容来确定条目的类型在每个指数。

到目前为止我使用的表达式是^(\d{2})\s?(x\s?(\d{2}))?(\d+/\d+)?$,但它并不完美,它返回了许多无用的组。有没有更有效和更合适的东西?

修改:我需要每行的编号。当只有一个数字时,暗示只测量宽度(包括任何小数分量,如第2行)。当有两个数字时,也测量了高度,但我只需要第一个数字的宽度(例如在最后一行)

3 个答案:

答案 0 :(得分:0)

以下是如何从文本文件中执行此操作的示例。 它适用于提供的数据。

     f = open("textfile.txt",r')

     for line in f :
         if 'x'in line:
             iposition = line.find('x')
             print(line[:iposition])

答案 1 :(得分:0)

尝试下面的正则表达式,它将捕获第一个数字,并且可选的小数位于第一个'cm'之前。

Error: Uncaught (in promise): Response with status: 404 Not Found for URL: /users

regex101 demo

答案 2 :(得分:0)

此正则表达式应该有效(Live Demo

^(\d+)(?:\s*cm\s+[xX])

解释

  • ^(\d+) - 在该行的开头至少捕获一位数字
  • (?: - 启动非捕获组
  • \s* - 后跟至少零空格字符
  • cm - 后跟文字cm
  • \s+ - 后跟至少一个空格字符
  • [xX] - 后跟文字xX
  • ) - 结束非捕获组

你不应该费心去匹配其余部分。