我如何使一个python正则表达式像“(.*)”这样,给定“a (b) c (d) e”python匹配“b”而不是“b) c (d”?
我知道我可以使用“[^)]”而不是“.”,但我正在寻找一个更通用的解决方案,使我的正则表达式更干净一点。有没有办法告诉python“嘿,尽快匹配这个”?
我如何使一个python正则表达式像“(.*)”这样,给定“a (b) c (d) e”python匹配“b”而不是“b) c (d”?
我知道我可以使用“[^)]”而不是“.”,但我正在寻找一个更通用的解决方案,使我的正则表达式更干净一点。有没有办法告诉python“嘿,尽快匹配这个”?
当前回答
\\(.*?\\)不行吗?这就是非贪婪语法。
其他回答
你想和(b)匹配吗?按照Zitrax和Paolo的建议去做。你想让它和b匹配吗?做
>>> x = "a (b) c (d) e"
>>> re.search(r"\((.*?)\)", x).group(1)
'b'
使用非贪婪匹配是一个好的开始,但我也建议你重新考虑使用。*——这个怎么样?
groups = re.search(r"\([^)]*\)", x)
\\(.*?\\)不行吗?这就是非贪婪语法。
就像其他人说的?*量词上的修饰符将解决您的直接问题,但要小心,您开始误入正则表达式停止工作的领域,您需要一个解析器。例如,字符串“(foo (bar)) baz”会给你带来问题。
你在寻找万能的*?
从文档来看,贪婪与非贪婪
非贪婪限定符*?, + ?, ? ?,或{m,n}?[…与…相配 尽量发短信。