Python 如何在正则表达式模式中找到正则表达式模式

Python 如何在正则表达式模式中找到正则表达式模式,python,regex,Python,Regex,我有一些文字如下: between [... between (...)] and (...) as ... ^.+(\s)between\s(.+?)\sand\s(.+?)$ 用正则表达式 between\s+(.+?)\s+and\s+(.+?)\s+as 我试图捕获两对括号中的内容,即与和之间的所限定的内容。然而,我被困在它总是返回方括号和第二对括号中的内容 编辑: 例如,如果文本为: between foo whatever between bar and dummy as 我

我有一些文字如下:

between [... between (...)] and (...) as ...
^.+(\s)between\s(.+?)\sand\s(.+?)$
用正则表达式

between\s+(.+?)\s+and\s+(.+?)\s+as
我试图捕获两对括号中的内容,即与和之间的
所限定的内容。然而,我被困在它总是返回方括号和第二对括号中的内容

编辑:

例如,如果文本为:

between foo whatever between bar and dummy as

我希望正则表达式提取'bar'和'dummy',而不是'foo whatever between bar'和'dummy'

在您的具体问题中,您需要匹配指向所讨论的中间位置的空格(这似乎是限制因素)。我通过以下几点取得了成果:

between [... between (...)] and (...) as ...
^.+(\s)between\s(.+?)\sand\s(.+?)$

使用
*
预先编写正则表达式,或使用负前瞻:

between(?!.*between\b)\s+(.+?)\s+and\s+(.+?)\s+as
试试这个:

between\s([^\s]+)\sand\s([^\s]+)

正则表达式无法轻松处理嵌套结构,您需要一个递归下降解析器。不清楚应该输出什么。请澄清。在正则表达式前面加上
*
@Barmar是否可以使用负前瞻?但是我不能让它工作。不,消极的前瞻没有帮助。我假设您允许任意级别的嵌套。这与单词
dummy
不匹配,请查看实时演示。是的@还有,我不喜欢这种前瞻。如果单词“between”出现在字符串后面的任何地方,您的正则表达式将不匹配任何内容。就像在x和y之间的
中一样,在
->之间不匹配。您应该将其改写为
(?:(?!between\b)。*
@revo,是的,如果文章中没有包含“as”这个词,但它似乎就是上下文,那么它会这样做,是吗?我认为这是关于让第一组匹配的文本尽可能短。如果这就是问题所在,你为什么建议在
*
前面加上前缀?这与你的展望完全不同。