首页 > 解决方案 > 我可以创建一个包含一些静态文本“X”后跟递归文本的正则表达式吗?

问题描述

regex在 Python3 中使用该模块,并且我希望能够检查字符串以匹配“零或单一模板”C++ 数据类型的字符串,例如Foo, Foo<Bar>, Foo<Bar<Baz>>,Foo<Bar<Baz<Hello<World>>>>等。

目前,我有(<X(?R)?>)*X一些文字在哪里。这几乎适用于所有给出的示例,只是它们本身也必须被<>对包围。

我正在寻找一种能够在被认为是递归部分的内容之前放置一些文本的方法。这可以用正则表达式吗?

标签: pythonregexrecursion

解决方案


regex确实允许递归正则表达式(这些表达式不是严格正则的,这就是为什么你会得到相互冲突的信息),你只需要添加一个基本情况:

(?>\w+<(?R)>)|\w+

这与

regex.match(r"(?>\w+<(?R)>)|\w+", "Foo<Bar<Baz>>")
# <regex.Match object; span=(0, 13), match='Foo<Bar<Baz>>'>

推荐阅读