gpt4 book ai didi

python - 在用户提交的正则表达式中查找捕获组

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:53 25 4
gpt4 key购买 nike

我有一个 python 应用程序需要处理用户提交的正则表达式。出于性能方面的考虑,我想禁止捕获组和反向引用。

我的想法是使用另一个正则表达式来验证用户提交的正则表达式不包含任何命名或未命名的组捕获,如下所示:

def validate_user_regex(pattern):
if re.match('[^\\\]\((?:\?P).*?[^\\\]\)', pattern) is not None:
return False
return True

虽然我认为我的想法可能适用于捕获组,但我不确定这是否会阻止各种反向引用。那么有没有更聪明的方法来防止在正则表达式中捕获组和反向引用?

最佳答案

正则表达式语言不是常规语言,因此它不能通过正则表达式可靠地分成有意义的部分(请参阅 RegEx match open tags except XHTML self-contained tags 了解 HTML 的相同情况)。

为什么不使用 Python 自己的解析器来做这个呢?

>>> r="whate(ever)(?:\\1)"
>>> import sre_parse #the module used by `re' internally for regex parsing
>>> sre_parse.parse(r)
[('literal', 119), ('literal', 104), ('literal', 97), ('literal', 116),
('literal', 101), ('subpattern', (1, [('literal', 101), ('literal', 118), ('lit
eral', 101), ('literal', 114)])), ('subpattern', (None, [('groupref', 1)]))]

如您所见,这是一棵解析树,您对第一个元素中具有非Nonegroupref< 的subpattern 节点感兴趣 的。

关于python - 在用户提交的正则表达式中查找捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27984083/

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