gpt4 book ai didi

python - 正则表达式两组匹配所有内容直到模式

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:03 25 4
gpt4 key购买 nike

我有以下例子:

Tortillas Bolsa 2a 1kg 4118
Tortillinas 50p 1 31Kg TAB TR 46113
Bollos BK 4in 36p 1635g SL 131
Super Pan Bco Ajonjoli 680g SP WON 100
Pan Blanco Bimbo Rendidor 567g BIM 49973
Gansito ME 5p 250g MTA MLA 49860

我想保留数字之前的所有内容,但我也不想要两个大写字母单词示例:ME, BK。我正在使用 ^((\D*).*?) [^A-Z]{2,3}

预期的结果应该是

Tortillas Bolsa
Tortillinas
Bollos
Super Pan Bco Ajonjoli
Pan Blanco Bimbo Rendidor
Gansito

使用正则表达式,我仍然得到两个大写字母单词 Bollos BKGansito ME

最佳答案

预编译具有前瞻性的正则表达式模式(如下所述)并在列表推导中使用 regex.match:

>>> import re
>>> p = re.compile(r'\D+?(?=\s*([A-Z]{2})?\s*\d)')
>>> [p.match(x).group() for x in data]

[
'Tortillas Bolsa',
'Tortillinas',
'Bollos',
'Super Pan Bco Ajonjoli',
'Pan Blanco Bimbo Rendidor',
'Gansito'
]

这里,data 是您的字符串列表。

详细信息

\D+?            # anything that isn't a digit (non-greedy)
(?= # regex-lookahead
\s* # zero or more wsp chars
([A-Z]{2})? # two optional uppercase letters
\s*
\d # digit
)

如果任何字符串不包含您要查找的模式,列表理解将出错(带有 AttributeError),因为 re.match 返回 None 在那种情况下。然后,您可以使用循环并在提取匹配部分之前测试 re.match 的值。

matches = []
for x in data:
m = p.match(x)
if m:
matches.append(m.group())

或者,如果在没有匹配项时需要占位符 None:

matches = []
for x in data:
matches.append(m.group() if m else None)

关于python - 正则表达式两组匹配所有内容直到模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50223742/

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