regex - Ruby - 仅匹配和替换电子邮件中的特定字符
问题描述
我有一个电子邮件地址xyz_abc@gmail.com
,我想将其替换为xy****@gmail.com
. 相同的标准如下:
- 将电子邮件中 @ 符号之前的所有字符转换为 *。
- 将前 2 个字符保留为 @ 符号后替换字符。
同样,我编写了如下逻辑:
"xyz_abc@gmail.com".gsub(/\A[\w+\-.]+/, "*")
输出为
"*@gmail.com"
实现我想要的一个可能的解决方案是用@拆分电子邮件地址并计算字符串前半部分的长度并替换为相同数量的(*)。但这不是最佳解决方案,因此需要一个直接匹配和替换的正则表达式。
预期输出:
一个正则表达式,可以匹配和替换 @ 符号之前的字符,留下前 2 个字符,如下所示:
xy****@gmail.com
任何建议将不胜感激。
解决方案
您可以使用
s = s.gsub(/(?:\G(?!\A)|\A[^@]{2})\K[^@]/, '*')
或者,
s = s.gsub(/(?<=[^@]{2})[^@](?=[^@]*@)/, '*')
正则表达式匹配
(?:\G(?!\A)|\A[^@]{2})
- 上一个成功匹配的结尾或字符串的开头以及除 a 之外的任何 2 个字符@
\K
-匹配重置运算符,丢弃到目前为止匹配的文本[^@]
- 以外的字符@
。
第二个正则表达式匹配
(?<=[^@]{2})
- 紧接在除 a 之外的任何两个字符之前的位置@
[^@]
- a 以外的字符@
(?=[^@]*@)
- 紧随其后的位置,后跟除 a@
和 a之外的任何 0 个或多个字符@
。
推荐阅读
- installation - 如何在安装过程中设置 pgAdmin 4 主密码?
- reactjs - react 使用了错误的 cookie
- reactjs - 我的 git 在反应时没有被识别,我不知道为什么
- java - 如何在android中使用GraphView绘制实时数据
- loopbackjs - loopback4 通过命令行创建控制器而没有提示问题
- javascript - 地图标记未出现在网站上
- api - 在 Visual Studio 默认选项中添加 REST API 客户端
- unit-testing - 人们测试他们的 clojure.spec 规范是否常见?
- apparmor - 如何在不同命名空间的 ubuntu 20.04 下使用 snap?获得许可被拒绝错误
- windows - EnableDelayedExpansion、For 和带有特殊字符(如 ! % &