gpt4 book ai didi

python - 正则表达式 (Python) - 使用后视的量词?

转载 作者:行者123 更新时间:2023-12-02 02:25:57 24 4
gpt4 key购买 nike

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

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 全深度齿和接触面

价格:36,56 和 311,45

实际上,需要迭代一个大列表。

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

最佳答案

你可以使用

^(?P<PN>\S+)\s+(?P<Name>.*?)\s+\d+\s+EA\s+(?P<Price>\d[\d,]*)

请参阅regex demo详细信息:

  • ^ - 字符串开头
  • (?P<PN>\S+) - 组PN : 一个或多个非空白字符
  • \s+ - 一个或多个空格
  • (?P<Name>.*?) - 组Name :除换行符之外的任何零个或多个字符尽可能少
  • \s+\d+\s+ - 由一个或多个空格括起的一个或多个数字
  • EA - 一个EA字符串
  • \s+ - 一个或多个空格
  • (?P<Price>\d[\d,]*) - 组Price :一个数字,然后是任何零个或多个数字或逗号。

在Python中,你可以像这样使用它

import re
rx = re.compile(r'^(?P<PN>\S+)\s+(?P<Name>.*?)\s+\d+\s+EA\s+(?P<Price>\d[\d,]*)')
l = ['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']
for el in l:
m = rx.match(el)
if m:
print(m.groupdict())
# => {'PN': '8000KE60803F6', 'Name': 'ST FULL-DEPTH TEETH', 'Price': '36,56'}
# {'PN': '8522-3770', 'Name': 'CONTACT', 'Price': '311,45'}

请参阅Python demo .

关于python - 正则表达式 (Python) - 使用后视的量词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65635006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com