gpt4 book ai didi

regex - Kotlin/Regex - 用重复字符替换一组模式

转载 作者:行者123 更新时间:2023-12-02 12:32:31 27 4
gpt4 key购买 nike

我想屏蔽 maskEmail 函数中传递的电子邮件。我目前遇到的问题是,当我替换模式的第 2 组和第 4 组 时,星号 * 没有重复。

这是我的代码:

fun maskEmail(email: String): String {
return email.replace(Regex("(\\w)(\\w*)\\.(\\w)(\\w*)(@.*\\..*)$"), "$1*.$3*$5")
}

这是输入:

tom.cat@email.com
cutie.pie@email.com
captain.america@email.com

这是该代码的当前输出:

t*.c*@email.com
c*.p*@email.com
c*.a*@email.com

预期输出:

t**.c**@email.com
c****.p**@email.com
c******.a******@email.com

编辑:我知道这可以通过 for 循环轻松完成,但我需要在正则表达式中完成。提前谢谢你。

最佳答案

对于您的问题,您需要匹配电子邮件地址中不是单词的第一个字符并且出现在 @ 之前的每个字符。 .您可以对断字进行否定的后视,对 @ 进行肯定的前瞻。符号:

(?<!\b)\w(?=.*?@)

然后可以将匹配的字符替换为 * .

请注意,我们在 ? 上使用了惰性量词 ( .* )提高效率。

Demo on regex101

注意@CarySwoveland 也指出,您可以替换 (?<!\b)\B

\B\w(?=.*?@)

Demo on regex101

正如@Thefourthbird 所指出的,这可以通过替换 .*? 来进一步提高效率。与 [^\r\n@]*

\B\w(?=[^\r\n@]*@)

Demo on regex101

或者,如果您只匹配单个字符串,则只需 [^@]* :

\B\w(?=[^@]*@)

Demo on regex101

关于regex - Kotlin/Regex - 用重复字符替换一组模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62481786/

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