我必须匹配类似于这些
的表达式
STAR 13
STAR 13, 23
STAR 1, 2 and 3 and STAR 1
但只捕获数字。 未指定位数。
我试过STAR(?:\s*(?:,|and)\s*(#\d+))+
但它似乎没有完全捕捉到这些术语。
没有其他依赖项可以添加。仅限re
模块。
问题是一个更大的问题,其中STAR
是另一个已经解决的正则表达式。请不要打扰它,只是把它当作一个字母组合。只需在正则表达式中包含字母STAR
。
答案 0 :(得分:0)
如果您不知道数字msInterval
的数量,以指定1位数或更多。要捕获所有号码,您可以使用:r'[0-9]+'
使用一个正则表达式:
r'(\d+)'
[('13','','')]
[('13','23','')]
[('1','2','3'),('1','','')]
可能是两个步骤更加简洁和清晰的结果,首先你需要在列表中有变量:
tab = [“STAR 13”,“STAR 13,23”,“STAR 1,2和3以及STAR 1”]
re.findall("STAR ([0-9]+),? ?([0-9]+)? ?a?n?d? ?([0-9]+)?",a)
[ '13']
['13','23']
['1','2','3','1']
您需要在list = filter(lambda x: re.match("^STAR",x),tab)
list_star = filter(lambda x: re.match("^STAR",x),tab)
for i in list_star:
re.findall(r'\d+', i)
一行:
my_digit += re.findall(r'\d+', i)
['13','13','23','1','2','3','1']