regex - 重复捕获组和替换 - 几乎在那里
问题描述
简单明了,我想提取/返回所有以“!>”开头的行并省略任何以“>”开头的行。
我正在寻找一个纯正则表达式解决方案,没有代码或脚本。
我想在 RegExExtract 函数的 Google 表格中使用它。
数据:
> 05/27/21 - Don - another internal note follows
!> 05/27/21 - Don - Client note to provide status
> 05/25/21 - Don - Added task
!> 05/23/21 - Don - another client note from earlier
所需提取物:
!> 05/27/21 - Don - Client note to provide status
!> 05/23/21 - Don - another client note from earlier
我尝试了以下但没有好处。只是想告诉你我不会不费吹灰之力就来这里的。
((?:[^!]\>)+)
没有任何替换来删除不以感叹号开头的行。
但这不起作用。
任何帮助,将不胜感激。
谢谢你有这么棒的社区。
更新:
@WiktorStribiżew - 抱歉,我错过了。谢谢你,所以我不会再深入那个兔子洞了。我现在以不同的方式处理它,它似乎有效。
修订数据
> 05/27/21 - Don - another internal note follows
@ 05/27/21 - Don - Client note to provide status
> 05/25/21 - Don - Added task
@ 5/23/21 - Don - an earlier client note
并使用这个公式:
=substitute(
trim(
regexreplace( B3, "(?:>.*)", "" )
),
char(10) & char(10),
char(10)
)
给了我想要的输出:
@ 05/27/21 - Don - Client note to provide status
@ 5/23/21 - Don - an earlier client note
从这里我可以用更好的东西替换'@'指示符
再次感谢。
解决方案
我建议使用
=regexreplace(
trim(
regexreplace( B3, "(?m)^>.*", "" )
),
"(\n){2,}",
"$1"
)
注意事项:
trim(regexreplace( B3, "(?m)^>.*", "" ))
- 从内容中删除所有以开头的行<
并修剪结果regexreplace(..., "(\n){2,}", "$1")
- 用一次替换任何两个或多个连续的换行符。
详情:
(?m)
- 一个多线标志,使^
匹配线开始和$
线结束位置^
- 一行的开始>
- 一个>
字符.*
- 除换行符之外的零个或多个字符,尽可能多。
该(\n){2,}
模式是一个重复的捕获组,匹配 2 个或更多 LF 字符,同时仅在捕获组内存缓冲区中保留最后一次捕获的事件,并$1
引用该值。
推荐阅读
- excel - 按标题名称复制列并粘贴到另一个工作簿
- reporting-services - SSRS - 如何在主报表中创建动态子报表
- php - 将内容而不是变量传递给 PHP 函数
- symfony - 传递给 App\Entity\Invitacion::setEmail() 的参数 1 必须是 App\Entity\User 的实例或 null - Symfony 4
- javascript - 尝试渲染从弹性搜索接收到的 JSON 字典但得到 [object Promise] 错误
- php - PHP将单词的第一个字母大写
- laravel - 在 DatabaseSeeder.php 的调用函数中注释时,Laravel 数据库 FooSeeder 仍在播种
- initialization - SwiftUI 视图(显然)在 init 运行之前布局
- joi - 如何验证 Joi 中可选键的必需属性?
- java - EJB 能否产生操作系统进程?