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

2024-07-04 07:57:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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.5升、750毫升等),还有包装尺寸(2包、6包等)。你知道吗

我想把字母“L”前的每个数字分开,忽略点。然后,ML或CL或L将被相同地处理,并且1.5L仍应被捕获为1.5L而不是15L

有人能帮我找到正确的正则表达式吗?你知道吗


Tags: 字符串产品尺寸数字标签ginproofsuperior
1条回答
网友
1楼 · 发布于 2024-07-04 07:57:31

下面是一个regex模式和一个如何完成任务的示例:

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')

相关问题 更多 >

    热门问题