python - 我可以创建一个包含一些静态文本“X”后跟递归文本的正则表达式吗?
问题描述
我regex
在 Python3 中使用该模块,并且我希望能够检查字符串以匹配“零或单一模板”C++ 数据类型的字符串,例如Foo
, Foo<Bar>
, Foo<Bar<Baz>>
,Foo<Bar<Baz<Hello<World>>>>
等。
目前,我有(<X(?R)?>)*
,X
一些文字在哪里。这几乎适用于所有给出的示例,只是它们本身也必须被<>
对包围。
我正在寻找一种能够在被认为是递归部分的内容之前放置一些文本的方法。这可以用正则表达式吗?
解决方案
regex
确实允许递归正则表达式(这些表达式不是严格正则的,这就是为什么你会得到相互冲突的信息),你只需要添加一个基本情况:
(?>\w+<(?R)>)|\w+
这与
regex.match(r"(?>\w+<(?R)>)|\w+", "Foo<Bar<Baz>>")
# <regex.Match object; span=(0, 13), match='Foo<Bar<Baz>>'>
推荐阅读
- java - 如果最终变量在参数化构造函数中动态初始化,则它违反最终规则
- c++ - 使用指向 typedef 固定长度数组的指针执行 memcpy 时是否需要取消引用?为什么或者为什么不?
- reactjs - 盖茨比:安装了一个新主题,删除它,现在我的应用程序坏了
- python - 处理视频时如何使用 matplotlib 随时间绘制每秒帧数 (fps)?
- python - 有没有办法让一个类添加多处理共享值?
- haskell - mapMaybe 用于 Data.Map 中的键
- r - 使用 knitr 从 Rmarkdown 创建 PDF 时减少上边距
- html - Flexbox 居中对齐无法按预期工作
- java - 枚举不会在 Spring 中存储在数据库中
- php - 我无法使用 Laravel 连接到 Postgresql