用星号或最后两个单词替换最后一个单词

问题描述 投票:2回答:3

我需要隐藏人员的姓氏。对于名字中包含三个单词的人,只需隐藏最后一个单词,ej:

Laura Torres Bermudez

应该

Laura Torres ********

和用于

Maria Fernanda Gonzales Lopez

应该是

Maria Fernanda ******** *****

我认为它们是两个正则表达式,因为根据单词数,将应用正则表达式。

我知道\w+将所有单词替换为一个星号,并且使用(?!\s).我可以替换除空格以外的字符。我希望你能帮助我。谢谢。

这是我的示例:https://regex101.com/r/yW4aZ3/942

javascript java regex replace word
3个回答
2
投票

不依赖ECMAScript 2018扩展正则表达式功能的JavaScript解决方案

s = s.replace(/^(\S+\s+\S+)([\s\S]*)/, function($0, $1, $2) {return $1 + $2.replace(/\S/g, '*');})

详细信息:

  • [^-字符串开头
  • (\S+\s+\S+)-组1:一个或多个非空白,1个或多个空白,然后1个或多个非空白]
  • [([\s\S]*)-组2:任意1个或多个字符。

替换为组1的内容,组2的内容,每个非空白字符用星号替换。

Java解决方案

s = s.replaceAll("(\\G(?!^)\\s*|^\\S+\\s+\\S+\\s+)\\S", "$1*");

请参见regex demo

详细信息

  • (\G(?!^)\s*|^\S+\s+\S+\s+)-组1:然后是上一个匹配项的结尾(\G(?!^))和0个或多个空格,或(|)1+个非空格,1 +个空格以及1+个非空格,1 +字符串开头的空格
  • \S-一个非空白字符。

3
投票

尝试一下:

(?<=\w+\s+\w+\s+.*)[^\s]

说明:

  • [?<=是负向后看-仅匹配指定模式前面的出现
  • [[^\s] /匹配除空格以外的所有内容(您使用过的-(?!\s).-实际上是对超前用途的怪异用法-“查找下一个字符,如果不是空白字符,则匹配任何字符”)]
  • 摘要:用任何至少两个字母(C0)和空格(C0)的序列替换任何非空白字符。

[请注意,对于只有两个字的人来说,它不会隐藏任何东西(在许多国家中很常见)。>

[此外,该测试工具的正则表达式必须稍作修改以匹配每行一个名称-请参见\w(已添加\s以从每行的开头进行匹配,并设置了“多行”标志)。


2
投票

有兴趣的话可以在JavaScript

© www.soinside.com 2019 - 2024. All rights reserved.