gpt4 book ai didi

python - 用于从字符串中查找解析瓶大小的正则表达式(例如 750ML)

转载 作者:行者123 更新时间:2023-11-28 21:31:32 25 4
gpt4 key购买 nike

我有一长串字符串,它们是我数据库中的不同产品,每个字符串都有产品标签和产品的产品尺寸(包括包装尺寸)。我想将字符串分成两个子字符串:第一部分直到大小,第二部分包含液体的大小,可能还包含包装的大小。例如,我有以下字符串:

str1 = 'PRODUCTA 1909 SUPERIOR GIN 89 PROOF 750ML' 

str2 = 'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 2PK'

str3 = 'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 6PK'

str4 = 'PRODUCTC FLAV GIN 70 PROOF VAP 50ML 5PK'

我想得到的是:

str1a = 'PRODUCTA 1909 SUPERIOR GIN 89 PROOF' 
str1b = '750ML'

str2a = 'PRODUCTB FLAV GIN 70 PROOF VAP'
str2b = '1.5L 2PK'

str2a = 'PRODUCTB FLAV GIN 70 PROOF VAP'
str2b = '1.5L 6PK'

str4a = 'PRODUCTC FLAV GIN 70 PROOF VAP'
str4b = '50ML 5PK'

这里的难点是很多产品在产品标签中都有数字(例如string1中的1909),并且有些产品尺寸不仅是升数(1.5L,750ML等),还有包装它的尺寸(2 件装、6 件装等)。

我想在字母 'L' 之前拆分每个数字,并忽略点。那么,ML 或 CL 或 L 将被同等对待,1.5L 仍应捕获为 1.5L 而不是 15L。

有人可以帮助我使用正确的正则表达式吗?

最佳答案

这是一个正则表达式模式和一个如何完成任务的示例:

PS:感谢@Toto 对管道的评论

import re


def get_volume(text):
# You can add all the list of volume fractions
_volume = re.search(r'(\d+(\.\d+)?[MCDNPF]?L(\s+\d+PK)?)', text)
if _volume:
volume = _volume.groups()[0]
return text.replace(volume, '').strip(), volume
return text, None


str1 = 'PRODUCTA 1909 SUPERIOR GIN 89 PROOF 750ML'
str2 = 'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 2PK'
str3 = 'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 6PK'
str4 = 'PRODUCTC FLAV GIN 70 PROOF VAP 50ML 5PK'

texts = [str1, str2, str3, str4]

for elm in texts:
print(get_volume(elm))

输出:

('PRODUCTA 1909 SUPERIOR GIN 89 PROOF ', '750ML')
('RODUCTB FLAV GIN 70 PROOF VA', '1.5L 2PK')
('RODUCTB FLAV GIN 70 PROOF VA', '1.5L 6PK')
('RODUCTC FLAV GIN 70 PROOF VA', '50ML 5PK')

更新:

如果您需要处理 .5ML 的情况,请使用此模式:

r'((\d+(\.\d+)?|(\.\d+))[MCDNPF]?L(\s+\d+PK)?)'

所以,例如:

str1 = 'PRODUCTA 1909 SUPERIOR GIN 89 PROOF 750ML'
str2 = 'PRODUCTB FLAV GIN 70 PROOF VAP .5L 2PK'
str3 = 'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 6PK'

它将返回:

('PRODUCTA 1909 SUPERIOR GIN 89 PROOF ', '750ML')
('RODUCTB FLAV GIN 70 PROOF VA', '.5L 2PK')
('RODUCTB FLAV GIN 70 PROOF VA', '1.5L 6PK')

关于python - 用于从字符串中查找解析瓶大小的正则表达式(例如 750ML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58014503/

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