Notepad++ 中的正则表达式 regular/recursive find/replace

Regexp regular/recursive find/replace in Notepad++

如何拆分以特定格式定义的一些字符串:

[length namevalue field]name=value[length namevalue field]name=value[length namevalue field]name=value[length namevalue field]name=value

是否可以使用 Notepad++ 中的 Find/Replace 正则表达式隔离名称=值对,用白色 space 替换 [长度名称值字段]? 主要问题与数值有关,其中简单的 \d{4} 搜索不起作用。


例如

输入:

0010name=mario0013surname=rossi0006age=180006phone=0014address=street
0013name=marianna0013surname=rossi0006age=210006phone=0015address=street1
0003name=pia0015surname=rossini0005age=30017phone=+39221122330020address=streetstreet

输出:

name=mario surname=rossi age=18 phone= address=street
name=mario surname=rossi age=18 phone= address=street
name=marianna surname=rossi age=21 phone= address=street1
name=pia surname=rossini age=3 phone=+3922112233 address=streetstreet

您可以使用

\d{4}(?=[[:alpha:]]\w*=)
\d{4}(?=[^\W\d]\w*=)

参见regex demo

模式匹配

  • \d{4} - 四位数
  • (?=[[:alpha:]]\w*=) - 紧接着是一个字母,然后是任何零个或多个单词字符,紧跟在当前位置右侧的 = 字符。
  • (?=[^\W\d]\w*=) - 紧跟一个字母或下划线,然后是任何零个或多个单词字符,紧跟在当前位置右侧的 = 字符。

在 Notepad++ 中,如果你想删除行首的匹配项并在其他任何地方替换为 space,你可以使用

^(\d{4}(?=[[:alpha:]]\w*=))|(?1)

并替换为 (?1: )。上面解释的模式 \d{4}(?=[[:alpha:]]\w*=) 匹配并 捕获 到组 1,如果它在行的开头 (^),并且只匹配其他任何地方((?1) 递归第 1 组模式,以免重复)。 (?1: ) 替换意味着如果第 1 组匹配,我们用空字符串替换,否则,我们用 space.

替换

查看演示截图: