如何在python中正确地匹配以下字符串?

如何在python中正确地匹配以下字符串?,python,regex,Python,Regex,我有以下字符串: 1-小胡萝卜(4Kids)(3美元)[额外计算0];[需要5个计数] 我正在尝试获得以下组: Item - 1 Food - Baby Carrots (4Kids) (3 DOLLARS) Cost - 3 Extra - 0 required - 5 以下是我当前未拾取任何内容的匹配字符串: '(?P<item>.+?)\-(?P<food>.*)\[.*?(?P<extra>\d+(\.\d+)?).*\].*\[.*?(?P<

我有以下字符串:

1-小胡萝卜(4Kids)(3美元)[额外计算0];[需要5个计数]

我正在尝试获得以下组:

Item - 1
Food - Baby Carrots (4Kids) (3 DOLLARS)
Cost - 3
Extra - 0
required - 5
以下是我当前未拾取任何内容的匹配字符串:

'(?P<item>.+?)\-(?P<food>.*)\[.*?(?P<extra>\d+(\.\d+)?).*\].*\[.*?(?P<required>\d+(\.\d+)?).*\]'
'(?P.+?)\-(?P.*)\[.*(?P\d+(\.\d+).*].\[.*(?P\d+(\.\d+)).*]'
我的尝试有什么问题吗?

像这样:

(?P<item>.+?)\-\s(?P<food>.*?\)).*?\((?P<cost>\d)\s\w+\)\s\[.*?(?P<extra>\d+(\.\d+)?).*\].*\[.*?(?P<required>\d+(\.\d+)?).*\]
(?P.+?)\-\s(?P.*).*(?P\d)\s\w+\)\s\[.*(?P\d+(\.\d+).*.*.*.[.*(?P\d+(\.\d+).*.]

此处演示:

如上所述,您缺少成本捕获,您还需要使
食品捕获不贪婪,并包括结束部分。我的版本:

(?P<Item>\d)-\s*(?P<Food>.*?\))\s*\((?P<Cost>\d*).*EXTRA\s*(?P<Extra>\d*).*REQUIRED\s*(?P<Required>\d*)

{'Food': 'Baby Carrots (4Kids)', 'Item': '1', 'Required': '5', 'Extra': '0', 'Cost': '3'}
(?P\d)-\s*(?P.*)\s*(?P\d*).*额外的\s*(?P\d*).*必需的\s*(?P\d*))
{'Food':'Baby Carrots(4Kids)''Item':'1','Required':'5','Extra':'0','Cost':'3'}
使用原始正则表达式似乎要快一点:

(?P<item>.+?)\-(?P<food>.*)\[.*?(?P<extra>\d+(\.\d+)?).*\].*\[.*?(?P<required>\d+(\.\d+)?).*\]
实际上,剩下的正则表达式工作正常,可以按原样添加到末尾:

\[.*?(?P<extra>\d+(\.\d+)?).*\].*\[.*?(?P<required>\d+(\.\d+)?).*\]


在分析你的正则表达式之前,我想到的是:

(?P<item>[0-9]+)- (?P<food>[\w ()]+) \((?P<cost>[0-9]+) DOLLARS\) \[EXTRA (?P<extra>[0-9]+) COUNT\]; \[REQUIRED (?P<required>[0-9]+) COUNT\]
(?P[0-9]+)-(?P[\w()]+)\(?P[0-9]+)美元\[额外(?P[0-9]+)计数\];\[所需(?P[0-9]+)计数\]



所有这些链接都来自。

问题的可能重复项是“+?”将使用完整的字符串。您非常接近。您试图从何处获取成本?我在您的正则表达式中看不到它。也就是说,运行正则表达式时,除了成本字符串与食物字符串合并之外,我什么都做得很好。您刚刚编辑了名称以包括(3美元)。那么你想要(3美元)作为食物名称的一部分,你想要3美元作为成本单独(并且是多余的)记录下来?
^(?P<item>[0-9]+?)
^(?P<item>[0-9]+?)-
(?P<food>.*)
(?P<food>[\w0-9 ()]+)
^(?P<item>[0-9]+?)- (?P<food>[\w0-9 ()]+)
^(?P<item>[0-9]+?)- (?P<food>[\w0-9 ()]+) \((?P<cost>[0-9]+) DOLLARS\)
\[.*?(?P<extra>\d+(\.\d+)?).*\].*\[.*?(?P<required>\d+(\.\d+)?).*\]
^(?P<item>[0-9]+?)- (?P<food>[\w0-9 ()]+) \((?P<cost>[0-9]+) DOLLARS\) \[EXTRA (?P<extra>\d+(\.\d+)?) COUNT\]; \[REQUIRED (?P<required>\d+(\.\d+)?) COUNT\]$
(?P<item>[0-9]+)- (?P<food>[\w ()]+) \((?P<cost>[0-9]+) DOLLARS\) \[EXTRA (?P<extra>[0-9]+) COUNT\]; \[REQUIRED (?P<required>[0-9]+) COUNT\]