我想过滤 python 中给定字符串的长度和呼吸

I want to filter the length and breath from a given string in python

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

我有这样的字符串-

"Canvas 36.5 X 48 piece-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 和 breath=9.7 但算法显示 14 和 38,它是正确的正在路上,但我想得到它们之间基于 x 的 len 和 breath,这将是它们的正确符号化方式。

您可以使用以下代码。

代码:

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?) - 如果有任何单位。但是请注意,您必须使用此正则表达式手动检查匹配项是否为有效单元(参见第一个和第三个示例)。

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

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

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??|(\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