【问题标题】:I want to filter the length and breath from a given string in python我想从python中的给定字符串中过滤长度和呼吸
【发布时间】:2021-09-20 04:37:16
【问题描述】:

我正在建立一个系统来计算打印图像的面积,以便从中制作账单。

我有类似的字符串-

“帆布 36.5 X 48 件-10”

"wallpaper 3"X27" "(有时我们用 " 来表示英寸)

“横幅 49x87 -10”

“14 乙烯基 38 x 9.7”

“壁纸 3ftX2Ft PC-1”

诸如此类……

我想从 vba 中的给定数据中过滤浮点数和整数,以便计算特定区域。

就像在第一个字符串中一样,我想获取 36.5 作为长度和 48 作为呼吸和 10 作为片段等等

到目前为止我正在使用

findall(r"[-+]?\d*\.\d+|\d+",myStr)

要获得所有整数和浮点数,我使用前两个变量作为长度和呼吸,但就像在“14 Vinyl 38 x 9.7”中一样,len = 38 和呼吸 = 9.7 但算法说 14 和 38,它是正确的方式,但我想根据它们之间的 x 获得 len 和 Breath,这将是它们的正确符号化方式。

【问题讨论】:

    标签: python python-3.x python-3.6 python-re


    【解决方案1】:

    另一种方法,看起来它也应该按预期工作:

    import re
    
    
    def l_b_dims_piece(s):
        """Return a tuple of (length, breadth, dimensions, piece)"""
        result = re.findall(r'([\d.]+)\s?(\D{0,2})\s?x\s?([\d.]+)\s?\2?|(\d+)', s, re.IGNORECASE)
    
        piece = 1
        l = b = 0
        dims = None
    
        for l_, dims_, b_, piece_ in result:
            if piece_ != '':
                piece = piece_
            else:
                l, b, dims = l_, b_, dims_.replace('"', 'in', 1)
    
        return l, b, dims, piece
    

    用于测试的正则表达式操场:Link

    【讨论】:

      【解决方案2】:

      您可以使用以下代码。

      代码:

      import re
      
      pictures = ['Canvas 36.5 X 48 piece-10',
          'wallpaper 3"X27',
          'Banner 49x87 -10',
          '14 Vinyl 38 x 9.7',
          'wallpaper 3ftX2Ft PC-1',
          ]
      
      for pic in pictures:
          size = re.search("(\d+\.?\d*)\s*(\D{0,2})[x]\s*(\d+\.?\d*)\s*(\D{0,2})", pic, re.IGNORECASE)
          print(f"'{size.group(0)}' --> {size.groups()}")
      

      输出:

      '36.5 X 48 pi' --> ('36.5', '', '48', 'pi')
      '3"X27' --> ('3', '"', '27', '')
      '49x87 -' --> ('49', '', '87', '-')
      '38 x 9.7' --> ('38', '', '9.7', '')
      '3ftX2Ft' --> ('3', 'ft', '2', 'Ft')
      

      size.group(1)size.group(3) 包含宽度和高度尺寸。

      这还允许您通过 size.group(2)size.group(4) 评估相应的单位(例如 ft、"、cm?) - 如果有任何单位。但是请注意,您必须手动检查是否有match 是具有此正则表达式的有效单元(参见第一个和第三个示例)。

      如果您在理解正则表达式时遇到问题,请告诉我。

      【讨论】:

        猜你喜欢
        • 2013-06-28
        • 1970-01-01
        • 2014-06-14
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多