使用正则表达式捕获多个可选组,包括重复和非重复部分

2024-04-26 02:31:05 发布

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

我必须匹配一个类似这些的表达式

STAR 13

STAR 13, 23

STAR 1, 2 and 3 and STAR 1

但只捕捉数字。 位数未指定。在

我试过STAR(?:\s*(?:,|and)\s*(#\d+))+ 但它似乎没有准确地捕捉到这些术语。 无法添加其他依赖项。只有re模块。在

问题是一个更大的问题,其中STAR是另一个已经解决的正则表达式。请别费心了,把它当作字母组合就行了。只需在正则表达式中包含字母STAR。在


Tags: 模块andre表达式字母费心数字star
1条回答
网友
1楼 · 发布于 2024-04-26 02:31:05

如果您不知道数字r'[0-9]+'的数字,请指定1位或更多。要捕获所有数字,可以使用:r'(\d+)'

使用一个正则表达式:

re.findall("STAR ([0-9]+),? ?([0-9]+)? ?a?n?d? ?([0-9]+)?",a)

[('13', '', '')]

[('13', '23', '')]

[('1', '2', '3'), ('1', '', '')]

通过两个步骤可以得到更清晰的结果,首先需要在这样的列表中包含变量:

tab = ["STAR 13","STAR 13, 23","STAR 1, 2 and 3 and STAR 1"]

^{pr2}$

['13']

['13', '23']

['1', '2', '3', '1']

你只需要在那之后把它放到一个新的列表中my_digit += re.findall(r'\d+', i)

一行:

import functools
tab = ["STAR 13","STAR 13, 23","STAR 1, 2 and 3 and STAR 1"]
digit=functools.reduce(lambda x,y: x+re.findall("\d+",y),filter(lambda x: re.match("^STAR ",x),tab),[])

['13', '13', '23', '1', '2', '3', '1']

相关问题 更多 >