Notepad ++正则表达式替换为来自同一文件的捕获

时间:2018-08-30 08:49:15

标签: regex notepad++

我有一个包含以下几行的文件(简洁的示例,实际文件为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
...

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

使用Notepad ++ Regex查找/替换是否可能?

匹配的表达式如下,其中第一个组应保持不变,而第二个组应由尚未使用正则表达式的结果替换。

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

1 个答案:

答案 0 :(得分:3)

正则表达式:

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

该点与来自valueX的{​​{1}}匹配type,然后从3寻找相同的valueX。如果type3是假设性的,或者没有什么特别值得关注的地方,那么就没有在查找/替换功能中使用正则表达式的纯方法。