首页 > 解决方案 > 正则表达式 (Python) - 使用 Look-Behind 绕过量词?

问题描述

我有许多元素的列表(所有字符串,但不幸的是也有很多空格),这里有两个元素作为示例:

sample_string = '8000KE60803F6                ST FULL-DEPTH TEETH            1 EA           36,56          36,56    2,00           0,73           37,29' ,'8522-3770                    CONTACT            2 EA          311,45         622,90    2,00          12,46          635,36'
my_list = list(sample_string)    

我希望使用正则表达式提取第一个数字/字母序列(在上述情况下,即 8000KE60803F6 和 8522-3770)然后我希望提取下一个 alpha 序列(在上述情况下,即 'ST FULL- DEPTH TEETH' 和 'CONTACT') 最后我希望提取 EA 之后的数值(在上述情况下,即 36,56 和 311,45)

我试过以下

for item in my_list:
    line=re.search(r'([A-Z0-9]*)(\s*)((?<=EA\s)[\d,]*)', item)
    if line:
        PN = line.group(1)
        Name = line.group(2)
        Price = line.group(3)
    print(PN)
    print(Name)
    print(Price)

以上输出

EA

EA

但是,我正在寻找以下输出:

产品编号:8000KE60803F6 和 8522-3770

名称: ST FULL-DEPTH TEETH and CONTACT

价格:36,56 和 311,45

而在现实中,需要遍历一个大列表。

我也尝试过环顾四周,但是当量词与它们一起使用时会出现常见错误?

标签: pythonregex

解决方案


您可以将此正则表达式与 3 个捕获的组一起使用:

(?P<PN>[A-Z\d-]+)\s+(?P<Name>[A-Z]+(?:[\s-]+[A-Z]+)*)\s+[^,]+?EA\s+(?P<Price>\d+(?:,\d+)*)

正则表达式演示


推荐阅读