正则表达式替换为捕获组

时间:2019-11-18 19:19:17

标签: regex notepad++

我有一段来自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)

感谢任何想法!

1 个答案:

答案 0 :(得分:1)

  • Ctrl + H
  • 查找内容:(?:^HI\*BBQ\b.+?~\RHI\*BB|\G(?!^).*?\bBB)\KQ\b
  • 替换为:B
  • 检查 匹配案例
  • 检查 环绕
  • 检查 正则表达式
  • 取消检查 . matches newline
  • 全部替换

说明:

(?:         # 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

屏幕截图(之前):

enter image description here

屏幕截图(之后):

enter image description here