【问题标题】:Notepad++ regex replace with captures from the same fileNotepad++ 正则表达式替换为同一文件中的捕获
【发布时间】:2018-08-30 08:49:15
【问题描述】:

我有一个包含以下行的文件(精简示例,实际文件是 1.000+ 行):

...
type1.value1=60  <-- replace 60 with 72 from line 5
type1.value2=15  <-- replace 15 with 14 from line 6
type2.value1=50  <-- replace 50 with 72 from line 5
type2.value2=18  <-- replace 18 with 14 from line 6
type3.value1=72  
type3.value2=14
...

我想将 type(x) 中的所有值替换为 type3 中的值。有很多类型/值组合,所以我想避免手工。另外,我必须经常这样做。

Notepad++ 正则表达式查找/替换有可能吗?

匹配表达式如下,其中第一组应保持不变,第二组应替换为另一个正则表达式的结果。

^type1.([\w]+)=([\S]+)

【问题讨论】:

  • 您可以在 Notepad++ 中使用 FIND/REPLACE 选项
  • 如何在第 3 行自动找到“72”?正如我所提到的,我有很多条目,这个例子只是一个小的 sn-p。该文件有200多个案例和1000多行。
  • 具有所需值的行是否总是在 2 行之后?
  • 如果N 类型中的valueX 应替换为3 类型中的相同valueX,那么请在此处查看现场演示regex101.com/r/50QXfc/1
  • @Harper 或者你更新你的 np++

标签: regex notepad++


【解决方案1】:

正则表达式:

type(?!3\.)\d+\.value(\d+)=\K\d+(?=[\s\S]*?type3\.value\1=(\d+))

替换为:

\2

解释:

  • type(?!3\.)\d+ 匹配除3 以外的类型
  • \.value(\d+)= 匹配直到 = 的所有内容,但捕获数字
  • \K 忘记匹配到现在
  • \d+ 匹配后面的数字
  • (?= 正向前瞻开始
    • [\s\S]*?懒惰地匹配任何东西
    • type3\.value\1= 与type3 的值相同
    • (\d+) 然后在 CP #2 中捕获它的值
  • ) 正向预测结束

Live demo

该点与type 中的valueX 匹配,而不是3,然后从type3 中寻找相同的valueX。如果valueX 是假设性的,或者没有什么特别的东西要查看,那么就没有在查找/替换功能中使用正则表达式的纯粹方法。

【讨论】:

  • 对于 Notepad++ 使用:(FzgF(?!84\.)\d{2})\.(\S+)=\S+(?=[\s\S]*?FzgF84\. \2=(\S+)) 和替换 \1.\2=\3 因为 \K 似乎不起作用。
  • Notepad++ 使用 PCRE 语法,\K 记录在他们的文档中。 Check it out.
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
相关资源
最近更新 更多