我想从字符串中提取一些字段,但是我不确定它们有多少个字段。 但是,我使用正则表达式,有一些我不明白的问题。python re matches groups
例如:
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(),但是,它会背叛我的初衷,所以我不喜欢这个主意。)
希望这会有所帮助。
告诉我们你试过的东西。除了这个事实,它使答复者认为你正在努力工作,而不仅仅是寻找解决方案,它还让我们告诉你你错了什么,找到符合你理解的答案等。 – abarnert 2013-02-28 18:32:15
在你的问题,你已经有'199'或'199,200'或'300,20,500'全部标记为一段代码。这是实际的源字符串,还是“199,200”?如果是后者...你为什么要匹配任何东西?如果你只是想匹配整个事情,你不需要正则表达式... – abarnert 2013-02-28 18:41:34
你的问题仍然是模糊的。你想在第二个例子中使用字符串“(199,200)”吗?如果是这样,只是'({}).format(s)'有什么问题?那么你在谈论的其他规则是什么,它们不能像这些一样被分割(',')? – abarnert 2013-02-28 18:46:10