表达式中的正则表达式“AND”提取这个和那个

我正在努力编写一个正则表达式来提取下面以粗体显示的数字。我为每个值设置了 3 个不同的正则表达式,但由于最后一个值之间可能有空格,我不知道如何在此处容纳“AND”。


轮胎 = '轮胎:P 275 / 65 R 18 A/S;275 / 65 R 18自动变速箱 猫头鹰;265 / 70 R 17 A/T 猫头鹰;'


我已经尝试过了,它适用于前两个,但不适用于最后一个。我想在单个正则表达式中包含最后一个。


p1 = re.compile(r'(\d+)/')

p2 = re.compile(r'/(\d+)')

p3 = re.compile(r'(?=.*[R](\d+))(?=.*[R]\s(\d+))')

我尝试过不同的东西,这是我尝试的最后一个代码,但结果不成功


如果我这样做


p1.findall(tire), p2.findall(tire), p3.findall(tire)

我想看到这个:


(['275', '275', '265'], ['65', '65', '70'], ['18', '18', '17'])


慕后森
浏览 104回答 1
1回答

尚方宝剑之说

你就快到了!您不需要三个单独的正则表达式。相反,请在单个正则表达式中使用多个捕获组。(\d{3})\/(\d{2})R\s?(\d{2})尝试一下: https: //regex101.com/r/Xn6bry/1解释:(\d{3}):捕获三位数字\/: 匹配正斜杠(\d{2}):捕获两位数R\s?:匹配R后跟一个可选的空格(\d{2}):捕获两位数。在 Python 中,执行以下操作:p1 = re.compile(r'(\d{3})\/(\d{2})R\s?(\d{2})')tire = 'Tire: P275/65R18 A/S; 275/65R 18 A/T OWL;265/70R 17 A/T OWL;'matches = re.findall(p1, tire)现在如果你看一下matches,你会得到 [('275', '65', '18'), ('275', '65', '18'), ('265', '70', '17')]将其重新排列为您想要的格式应该非常简单:# Make an empty list-of-list with three entries - one per groupgroups = [[], [], []]for match in matches:    for groupnum, item in enumerate(match):        groups[groupnum].append(item)现在groups是[['275', '275', '265'], ['65', '65', '70'], ['18', '18', '17']]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python