代码之家  ›  专栏  ›  技术社区  ›  Albobz

用于匿名化名称的正则表达式

  •  1
  • Albobz  · 技术社区  · 7 年前

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

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

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

    然而,这个表达式不会存储第一个或最后一个字母,我不知道如何存储。

    下面是一条示例线:

    February 3, 2018    screen_name: FR33Q  location: Europe    verified: false lang: en
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   revo shanwije    7 年前

    方法1

    你必须与 \G 元字符。在N++中使用 \G级 有点棘手。

    要查找的正则表达式:

    (?>(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