使用不匹配的组在(记事本++)中逐个字符串替换?

时间:2016-06-19 02:03:18

标签: regex string

我希望在“字符串”之后替换

stringreplacefield 角色扮演

用于生成

 stringstringeplacefield
第一次更换后

  stringstringstringplacefield
第二次替换后

 stringstringstringstringlacefield
第三次替换后

 stringstringstringstringstringacefield

使用不匹配的组
在记事本++中

我已经试了几天

请帮帮我

1 个答案:

答案 0 :(得分:0)

描述

(((?:string)+)(?!string).([^\n\r]*?)(field))\Z

替换为: $1\n$2string$3$4

Regular expression visualization

来自Notepad ++

从Notepad ++中,请注意您应该使用notpad ++ 6.1或更高版本,因为旧版本中的正则表达式存在问题,现在已经解决了。

  1. ctrl h 进入查找和替换 模式

  2. 选择正则表达式选项

  3. 在“查找内容”字段中输入(((?:string)+)(?!string).([^\n\r]*?)(field))\Z

  4. 在<替换为“字段中
  5. 输入$1\n$2string$3$4

  6. 点击全部替换。每次单击全部替换时,将会吃掉一个新字符,并插入一个新行。

  7. 实施例

    正则表达式演示

    https://regex101.com/r/jK6jF7/1

    示例文字

    stringreplacefield
    

    替换后

    1st time
       stringreplacefield
       stringstringeplacefield
    
    2nd time
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
    
    3rd time
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
       stringstringstringstringlacefield
    
    4th time
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
       stringstringstringstringlacefield
       stringstringstringstringstringacefield
    
    5th time
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
       stringstringstringstringlacefield
       stringstringstringstringstringacefield
       stringstringstringstringstringstringcefield
    
    6th time
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
       stringstringstringstringlacefield
       stringstringstringstringstringacefield
       stringstringstringstringstringstringcefield
       stringstringstringstringstringstringstringefield
    
    7th time
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
       stringstringstringstringlacefield
       stringstringstringstringstringacefield
       stringstringstringstringstringstringcefield
       stringstringstringstringstringstringstringefield
       stringstringstringstringstringstringstringstringfield
    
    8th time since there are no more characters between "string" and field, then no more replacements are made
       stringreplacefield
       stringstringeplacefield
       stringstringstringplacefield
       stringstringstringstringlacefield
       stringstringstringstringstringacefield
       stringstringstringstringstringstringcefield
       stringstringstringstringstringstringstringefield
       stringstringstringstringstringstringstringstringfield
    

    解释

    NODE                     EXPLANATION
    ----------------------------------------------------------------------
      (                        group and capture to \1:
    ----------------------------------------------------------------------
        (                        group and capture to \2:
    ----------------------------------------------------------------------
          (?:                      group, but do not capture (1 or more
                                   times (matching the most amount
                                   possible)):
    ----------------------------------------------------------------------
            string                   'string'
    ----------------------------------------------------------------------
          )+                       end of grouping
    ----------------------------------------------------------------------
        )                        end of \2
    ----------------------------------------------------------------------
        (?!                      look ahead to see if there is not:
    ----------------------------------------------------------------------
          string                   'string'
    ----------------------------------------------------------------------
        )                        end of look-ahead
    ----------------------------------------------------------------------
        .                        any character except \n
    ----------------------------------------------------------------------
        (                        group and capture to \3:
    ----------------------------------------------------------------------
          [^\n\r]*?                any character except: '\n' (newline),
                                   '\r' (carriage return) (0 or more
                                   times (matching the least amount
                                   possible))
    ----------------------------------------------------------------------
        )                        end of \3
    ----------------------------------------------------------------------
        (                        group and capture to \4:
    ----------------------------------------------------------------------
          field                    'field'
    ----------------------------------------------------------------------
        )                        end of \4
    ----------------------------------------------------------------------
      )                        end of \1
    ----------------------------------------------------------------------
      \Z                       before an optional \n, and the end of the
                               string
    ----------------------------------------------------------------------