regex - 正则表达式捕获具有特定单词的组
问题描述
示例文本:
begin
more text
art
id:213213
code:"XXX"
name:234
art-
art
id:543
name:72
code:"AAA"
art-
art
code:"XXX"
id:32
name:46
art-
art
code:"CCC"
id:8765
art-
art
id:876
code:"DDD"
art-
even more text
even more text
end
目标:
试图让组以art
组art-
包含的位置开始"XXX"
。
所以我想要
art
id:213213
code:"XXX"
name:234
art-
和
art
code:"XXX"
id:32
name:46
art-
从regex101开始,但没有走多远。
试过:
(?sm)(.*?)(?:art.*?art-)(.*?)
和
(?sm)(.*?)(?:art.*?"XXX".*?art-)(.*?)
任何帮助,将不胜感激。
解决方案
我们可以使用Tempered Greedy token来做到这一点。试试这个正则表达式:
art(?:(?!art-)[\s\S])*code:"XXX"(?:(?!art-)[\s\S])*art-
扩展:
art
- 火柴art
(?:(?!art-)[\s\S])*
- 匹配不以 text 开头的任何字符的 0+ 次出现art-
。简而言之,它匹配任何东西,直到找到下一次出现art-
code:"XXX"
- 火柴code:"XXX"
(?:(?!art-)[\s\S])*
- 再次匹配不以文本开头的任何字符的 0+ 次出现art-
art-
- 火柴art-
推荐阅读
- reactjs - 在 React 中使用 async/await 时未调用函数
- git - GIT,如何在没有所有用户命令的情况下复制移动的标签?
- c# - 无法使用 SendInBlue Api 创建具有属性的联系人
- javascript - particles-js 没有覆盖整个页面
- c# - 有没有办法在配置实体时将默认值(例如基于 IOptions)设置为忽略的属性?
- java - 从一个 recyclerview 中删除一个项目并将其添加到另一个
- javascript - javascript/ 向 repl.it 中的原型添加函数
- firebase - Flutter websockets 在本地网络中工作,但在 Firebase 托管中不工作
- go - Go Gin 框架登录 JSON
- sequelize.js - Sequelize 搜索字段而不是变量