正则表达式匿名化名称

时间:2018-03-10 19:53:13

标签: regex notepad++ username

我正在使用Notepad ++和带有正则表达式的查找和替换模式来更改用户名,这样只显示屏幕名称的第一个和最后一个字符,由四个星号(*)分隔。例如,“albobz”将成为“a **** z”。

用户名直接列在提示“screen_name:”之后,我知道我可以使用正则表达式找到所有用户名:

screen_name:\s([^\s]+)

但是,这个表达式不会存储第一个或最后一个字母,我不知道该怎么做。

以下是一个示例行:

February 3, 2018    screen_name: FR33Q  location: Europe    verified: false lang: en

1 个答案:

答案 0 :(得分:1)

方法1

您必须使用\G元字符。在使用\G的N ++中有点棘手。

正则表达式找到:

(?>(screen_name:\s+\S)|\G(?!^))\S(?=\S)

故障:

  • (?>构建非捕获组(原子)

    • (首次捕获群体的开始
      • screen_name:\s\S匹配姓名的第一个字母
    • )第一个CG结束
    • |
    • \G(?!^)从上一场比赛继续
  • ) NCG结束
  • \S匹配非空白字符
  • (?=\S)最后一个角色

替换为:

\1*

Live demo

方法2

上面的解决方案用*替换每个内部字符,因此长度保持不变。如果你想在不考虑长度的情况下放置四个* s,你会搜索:

(screen_name:\s+\S)(\S*)(\S)

并替换为:\1****\3

Live demo