gpt4 book ai didi

python - 正则表达式 匹配相等数量的两个字符

转载 作者:行者123 更新时间:2023-11-30 22:49:33 25 4
gpt4 key购买 nike

我想使用正则表达式将任何函数的参数作为字符串进行匹配。作为示例,我们假设以下字符串:

predicate(foo(x.bar, predicate(foo(...), bar)), bar)

这可能是较长序列的一部分

predicate(foo(x.bar, predicate(foo(...), bar)), bar)predicate(foo(x.bar, predicate(foo(...), bar)), bar)predicate(foo(x.bar, predicate(foo(...), bar)), bar)

我现在想找到表示函数/谓词及其参数的所有子字符串(即在第一个示例中整个字符串以及嵌套的 predicate(foo(...), bar) )。问题是我不能像这样简单地匹配

predicate\(.*, bar\)

因为如果*,我可能会匹配比谓词的参数更多的内容。如果是贪婪的,或者如果是懒惰的,则更少。这是因为这样的 predicates() 可以嵌套。

我需要一个正则表达式来查找字符串 predicate(...)哪里...匹配任何包含等量 ( 的字符串的和)的(懒惰)。

如果重要的话:我在 python 中使用正则表达式和 re 模块。

最佳答案

添加 PyPI package regex ,正如 @Tim Pietzcker 建议的那样,您可以使用 recursive regexes .

>>> import regex
>>> s = 'predicate(foo(x.bar, predicate(foo(...), bar)), bar)'
>>> pattern = regex.compile(r'(\w+)(?=\(((?:\w+\((?2)\)|[^()])*)\))')
>>> pattern.findall(s)
[('predicate', 'foo(x.bar, predicate(foo(...), bar)), bar'),
('foo', 'x.bar, predicate(foo(...), bar)'),
('predicate', 'foo(...), bar'),
('foo', '...')]

您还可以限制它只查找“谓词”:

>>> pattern = regex.compile(r'(predicate)(?=\(((?:\w+\((?2)\)|[^()])*)\))')
>>> pattern.findall(s)
[('predicate', 'foo(x.bar, predicate(foo(...), bar)), bar'),
('predicate', 'foo(...), bar')]

关于python - 正则表达式 匹配相等数量的两个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39704916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com