捕获正则表达式中的多个可选组,重复和不重复

时间:2017-01-12 10:45:29

标签: python regex

我必须匹配类似于这些

的表达式
  

STAR 13

     

STAR 13, 23

     

STAR 1, 2 and 3 and STAR 1

但只捕获数字。 未指定位数。

我试过STAR(?:\s*(?:,|and)\s*(#\d+))+ 但它似乎没有完全捕捉到这些术语。 没有其他依赖项可以添加。仅限re模块。

问题是一个更大的问题,其中STAR是另一个已经解决的正则表达式。请不要打扰它,只是把它当作一个字母组合。只需在正则表达式中包含字母STAR

1 个答案:

答案 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']