2024-04-26 02:31:05 发布
网友
我必须匹配一个类似这些的表达式
STAR 13STAR 13, 23STAR 1, 2 and 3 and STAR 1
STAR 13
STAR 13, 23
STAR 1, 2 and 3 and STAR 1
但只捕捉数字。 位数未指定。在
我试过STAR(?:\s*(?:,|and)\s*(#\d+))+ 但它似乎没有准确地捕捉到这些术语。 无法添加其他依赖项。只有re模块。在
STAR(?:\s*(?:,|and)\s*(#\d+))+
re
问题是一个更大的问题,其中STAR是另一个已经解决的正则表达式。请别费心了,把它当作字母组合就行了。只需在正则表达式中包含字母STAR。在
STAR
如果您不知道数字r'[0-9]+'的数字,请指定1位或更多。要捕获所有数字,可以使用:r'(\d+)'
r'[0-9]+'
r'(\d+)'
使用一个正则表达式:
re.findall("STAR ([0-9]+),? ?([0-9]+)? ?a?n?d? ?([0-9]+)?",a)
[('13', '', '')][('13', '23', '')][('1', '2', '3'), ('1', '', '')]
[('13', '', '')]
[('13', '23', '')]
[('1', '2', '3'), ('1', '', '')]
通过两个步骤可以得到更清晰的结果,首先需要在这样的列表中包含变量:
tab = ["STAR 13","STAR 13, 23","STAR 1, 2 and 3 and STAR 1"]
['13']['13', '23']['1', '2', '3', '1']
['13']
['13', '23']
['1', '2', '3', '1']
你只需要在那之后把它放到一个新的列表中my_digit += re.findall(r'\d+', i)
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']
如果您不知道数字
r'[0-9]+'
的数字,请指定1位或更多。要捕获所有数字,可以使用:r'(\d+)'
使用一个正则表达式:
通过两个步骤可以得到更清晰的结果,首先需要在这样的列表中包含变量:
^{pr2}$你只需要在那之后把它放到一个新的列表中
my_digit += re.findall(r'\d+', i)
一行:
相关问题 更多 >
编程相关推荐