我有一个包含以下几行的文件(简洁的示例,实际文件为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++正则表达式可以找到/替换吗?

匹配的表达式如下,其中第一组应保持不变,而第二组应由更正则表达式的结果代替。
^type1.([\w]+)=([\S]+)

最佳答案

正则表达式:

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

    关键是要从不同于valueXtype匹配3,然后从valueX寻找相同的type3。如果valueX是假设的,或者没有什么特别的值得关注的地方,那么在查找/替换功能中就没有使用正则表达式的纯方法。

    关于regex - Notepad++正则表达式替换为来自同一文件的捕获,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52092800/

    10-16 23:48