regex - 如果存在正则表达式,则捕获特定行
问题描述
如果我的文件可能是:
numbers:
32
45
999
56
或者
numbers:
23
45
56
是999
一个常数,但其他数字和行数会发生变化。
有没有捕捉的方法:
- 在第一种情况下,上面
999
后跟一个空行(即不包括999
) - 在第二种情况下的空行上方,其中
999
不存在
到目前为止,我已经尝试过:
(numbers:(?:\n.+)*)(\n999)
— 这在第一种情况下效果很好;第一组捕获高于 999 的所有内容。它 obv 在没有 的地方不起作用999
,所以......(numbers:(?:\n.+)*)(\n999)?
— 我原以为这两种情况都适用。但是在第一种情况下,这捕获了999
第一组中的 ,我猜是因为它是贪婪的,并且?
是(\n999)
可选的,所以第一组可以自由地捕获它。
也有可能我过于复杂了,并且有一些简单的解决方案。
非常感谢!
解决方案
这是一个不使用前瞻的正则表达式:
^(numbers:(?:\n.+)*?)(?:\n(?:999)?$)
正则表达式详细信息:
^
: 起始线(
: 开始捕获组 #1numbers:
: 匹配numbers:
文本(?:\n.+)*?
: 匹配一行中后跟 1+ 个字符的换行符。重复此 0 次或更多次(非贪婪)
)
: 结束捕获组 #1(?:\n(?:999)?$)
: 必须后跟换行符和999
/或空行
推荐阅读
- ruby - 我可以通过 ruby-git 获取上游远程分支吗
- sql - Postgresql - 将数据库中不同模式的表值合并到一个表中
- javascript - Angular中用户的指纹认证| Python
- jenkins - 无法在 Jenkins 和 newman 的 Git hub 存储库的嵌套文件夹中运行 Postman 集合
- haskell - Haskell如何附加自定义数据
- python - 当资源不可用时有效处理从 __enter__ 引发的 python 异常
- firebase - Firestore 安全设置规则中的“request.resource.auth”与“request.auth”有什么不同?
- javascript - 有没有办法通过我的应用程序中的“onPress()”事件在手机设备背景中打开像 Facebook 这样的应用程序?
- php - 如何在 laravel livewire 中应用 select2 与多个刀片文件中的 1 个组件
- react-redux - TypeError:无法读取未定义倒计时反应循环计时器的属性“地图”