regex - 捕获组中的正则表达式替换
问题描述
我有一段来自 EDI X12 的文本。我试图找到一个BBQ
段后面跟着另一个BBQ
段的行。我想将BBQ
第二行中的所有段替换为BBB
原始文本
HI*BBR<0Y6D0Z1<D8<20190816~
HI*BBQ<05BC0ZZ<D8<20190806*BBQ<05BB0ZZ<D8<20190729*BBQ<06UM07Z<D8<20190729~
HI*BBQ<0JBL0ZZ<D8<20190809*BBQ<0J9N0ZZ<D8<20190816*BBQ<0KBS0ZZ<D8<20190816~
HI*BI<71<RD8<20190716-20190722~
需要成为
HI*BBR<0Y6D0Z1<D8<20190816~
HI*BBQ<05BC0ZZ<D8<20190806*BBQ<05BB0ZZ<D8<20190729*BBQ<06UM07Z<D8<20190729~
HI*BBB<0JBL0ZZ<D8<20190809*BBB<0J9N0ZZ<D8<20190816*BBB<0KBS0ZZ<D8<20190816~
HI*BI<71<RD8<20190716-20190722~
这针对我在捕获组 3 中寻找的内容,但是如何在该组中BBQ
替换BBB
?
(^HI\*BBQ.+?~\r\n)(^HI\*)(BBQ.+?~\r\n)
感谢您的任何想法!
解决方案
- Ctrl+H
- 找什么:
(?:^HI\*BBQ\b.+?~\RHI\*BB|\G(?!^).*?\bBB)\KQ\b
- 用。。。来代替:
B
- 检查 火柴盒
- 检查 环绕
- CHECK 正则表达式
- 取消选中
. matches newline
- Replace all
解释:
(?: # non capture group
^ # begining of line
HI\*BBQ # literally
.+? # 1 or more any character but newline
~ # a tilde
\R # any kind of linebreak
HI\*BB # literally
| # OR
\G # restart from last match position
(?!^) # not at the beginning of line
.*?BB # 0 or more any character but newline, not greedy, followed by BB
) # end group
\K # forget all we have seen until this position
Q # the letter Q
屏幕截图(之前):
屏幕截图(之后):
推荐阅读
- mysql - 使用正确凭据挂起 Ambari 管理员登录,使用无效凭据引发正确错误
- webpack - 带有 web 和 webworker 条目的 Webpack 开发服务器忽略 html-webpack-plugin
- python - parse_dates 导致 grid() 被移位
- azure - 如何使用 Azure 数据工厂动态添加 HTTP 端点以将数据加载到 azure 数据湖中,并且 REST api 是经过 cookie 验证的
- python - 将计数列表转换为数字列表的最有效方法
- php - CakePHP 3.8 博客教程错误:缺少控制器
- php - 在 PHP 中将 UTF8 转换为十六进制
- autodesk-forge - 在 Angular 应用程序中使用基于 Forge Javascript 的扩展
- swift - UICollectionViewLayout Not Resizing UIImageViews Within Cells
- c# - 用于上传图像的 Asp.Net Core HttpPost API 结果无法获得任何响应