使用捕获组提取字符串(使用re.match)

时间:2016-11-27 06:40:57

标签: python regex python-2.7

这是我的正则表达式,我试图检索3个捕获组

res = re.match("^(?![()]*)([()])(.*)$", input)

这是我的预期结果

input = "This is a ()demo)"
I would need 3 capture groups 
res.group(1) -> "This is a "
res.group(2) -> "("
res.group(3) -> ")demo)"

input = "Another demo )(continues...()"
res.group(1) -> "Another demo "
res.group(2) -> ")"
res.group(3) -> "(continues...()"

input = "(last demo () and finally"
res.group(1) -> ""
res.group(2) -> "("
res.group(3) -> "last demo () and finally"

但我写的正则表达式与上面给出的3个输入中的任何一个都不匹配。我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

你做错的第一件事是使用否定的先行断言

(?![()]*)

我猜你试图说"匹配任何字符除了 ()"。您可以通过使用^符号启动组来使用常规匹配组执行此操作。

([^()]*)

否则,你的正则表达式非常正确。

这是一个正则表达式,它将为您提供预期的输出

^([^()]*)([()])(.*)$

https://regex101.com/r/SD0L06/1