我想从字符串中提取一些字段,但是我不确定它们有多少。我使用了正则表达式,但是有一些我不明白的问题。
例如:
199 -> (199)
199,200 -> (199,200)
300,20,500 -> (300,20, 500)
我试过了,但是有点我无法让它工作。希望有人能给我一些建议。我会感激的。
我试过的正则表达式:
>>> re.match('^(\d+,)*(\d+)$', '20,59,199,300').groups()
('199,', '300')
// in this, I do not really care about ',' since I could use .strip(',') to trim that.
我做了一些谷歌:并尝试使用 re.findall,但我不知道如何得到这个:
>>> re.findall('^(\d+,)*(\d+)$', '20,59,199,300')
[('199,', '300')]
-------------------------------------------------- - - 更新
我意识到,如果不讲整个故事,这个问题可能会令人困惑。基本上我想验证在 crontab (或类似)中定义的语法
我为 _VALID_EXPRESSION 创建了一个数组:它是一个嵌套元组。
(field_1,
field_2,
)
对于每个 field_1,它有两个元组,
field_1: ((0,59), (r'....', r'....'))
valid_value valid_format
在我的代码中,它看起来像这样:
_VALID_EXPRESSION = \
12 (((0, 59), (r'^\*$', r'^\*/(\d+)$', r'^(\d+)-(\d+)$',
13 r'^(\d+)-(\d+)/(\d+)$', r'^(\d+,)*(\d+)$')), # second
14 ((0, 59), (r'^\*$', r'^\*\/(\d+)$', r'^(\d+)-(\d+)$',
15 r'^(\d+)-(\d+)/(\d+)$', r'^(\d+,)*(\d+)$')), # minute
16 .... )
在我的解析函数中,我所要做的就是提取所有组并查看它们是否在有效值范围内。
我需要的正则表达式之一是它能够正确匹配这个字符串 '50,200,300' 并在这种情况下提取所有数字。(我当然可以使用 split(),但是,它会背叛我的初衷。所以,我不喜欢这个想法。)
希望这会有所帮助。