Python3正则表达式问题

时间:2016-06-03 12:56:19

标签: python regex

我正在为我需要解析命令行参数的问题编写解决方案。在解析之前,我首先进行了验证。

允许的参数是:

someKey=(apps IN (app1))
someKey=(apps IN (app1,app2))
someKey=(apps IN (app1,app2, app3))

但是如果逗号位于上一个应用名称的末尾,那么我希望验证失败。

someKey=(apps IN (app1,app2,))

我写的正则表达式如下。

\(apps\sIN\s\((app\d|,)+\)\)

但它同时采取有效和无效的案件。我得到了一些关于前瞻和查看后面的参考,但未能正确实现它。你们中的任何人都可以帮助我理解这个问题的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用\(apps\sIN\s\((app\d+)(,\s*app\d+)*\)\)

这将确保至少出现一次app\d+,并且每次后续出现都必须以逗号(和可选的空格)开头。

Demo

如果您需要捕获应用名称,可以使用:

\(apps\sIN\s\((app\d+)((?:,\s*(?:app\d+))*)\)\)

并且您将在捕获组1中拥有第一个应用程序名称,其余 - 包括逗号 - 在捕获组2中,然后需要用逗号分隔并使空格strip脱离