gpt4 book ai didi

regex - Ruby - 仅匹配和替换电子邮件中的特定字符

转载 作者:行者123 更新时间:2023-12-02 09:06:07 24 4
gpt4 key购买 nike

我有一个电子邮件地址 xyz_abc@gmail.com,我想将其替换为 xy****@gmail.com。相同的标准如下:

  1. 将电子邮件中@符号前的所有字符转换为*。
  2. 在保留前 2 个字符到 @ 符号后替换字符。

同样,我编写了如下逻辑:

"xyz_abc@gmail.com".gsub(/\A[\w+\-.]+/, "*") 

输出为

"*@gmail.com"

实现我想要的一个可能的解决方案是用@拆分电子邮件地址并计算字符串前半部分的长度并替换为相同数量的(*)。但这不是最佳解决方案,因此需要一个直接匹配和替换的正则表达式。

预期输出:

一个正则表达式,可以匹配和替换@符号之前的字符,保留前两个字符,如下所示:

xy****@gmail.com

任何建议将不胜感激。

最佳答案

你可以使用

s = s.gsub(/(?:\G(?!\A)|\A[^@]{2})\K[^@]/, '*')

或者,

s = s.gsub(/(?<=[^@]{2})[^@](?=[^@]*@)/, '*')

正则表达式匹配

  • (?:\G(?!\A)|\A[^@]{2}) - 上一个成功匹配的结尾或字符串的开头以及除 @ 之外的任何 2 个字符
  • \K - 丢弃到目前为止匹配的文本的匹配重置操作符
  • [^@] - @ 以外的字符.

第二个正则表达式匹配

  • (?<=[^@]{2}) - 紧接在除 @ 之外的任何两个字符之前的位置
  • [^@] - 除 @ 以外的字符
  • (?=[^@]*@) - 紧随其后的位置是除 @ 以外的任何 0 个或多个字符然后是 @ .

关于regex - Ruby - 仅匹配和替换电子邮件中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58361817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com