我正在尝试编写正则表达式来屏蔽电子邮件地址。示例如下。
输入:john.doe@example.en.com
输出:j ******* @ e *********。com
我尝试过以下操作,但我似乎无法使其正常工作。
正则表达式:
(?<=.).(?=[^@]\*?@)
输出:J- ******* @ example.en.com
正则表达式:
(?<=.).(?=[^@]\*?)(?=[^\.]\*?\.)
输出:J。****************** COM
任何帮助将不胜感激。 demo
答案 0 :(得分:5)
foo@bar.com
⇒f**@b**.com
(当前问题) - s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
(请参阅the regex demo)
foo@bar.com
⇒f**@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(请参阅the regex demo)
foo@bar.com
⇒f*o@b*r.com
- s.replaceAll("(?<=.)[^@](?=[^@]*?[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*[^@]\\.)", "*")
(请参阅the regex demo)
foo@bar.com
⇒f**@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(请参阅the regex demo)
foo@bar.com
⇒f*o@b*****m
- s.replaceAll("(?<=.)[^@](?=[^@]*[^@]@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?!$)", "*")
(请参阅the regex demo)
如果您无法使用基于代码的解决方案,则可以使用
s.replaceAll("(?<=.)[^@](?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)", "*")
请参阅regex demo
它的作用:
(?<=.)[^@](?=[^@]*?@)
- 除了@
之外的其他字符([^@]
),前面有任何一个字符((?<=.)
),后跟任何0或更多字符@
最多@
((?=[^@]*?@)
)|
- 或(?:(?<=@.)|(?!^)\\G(?=[^@]*$))
- 匹配字符串中前缀为@
的位置以及任何字符((?<=@.)
)或(|
)上一次成功匹配的结束( (?!^)\\G
)后面跟着@
uo以外的任何0 +字符到字符串末尾((?=[^@]*$)
).
- 任何一个字符(?=.*\\.)
- 后面跟着字符串中最后一个.
符号的0个字符。答案 1 :(得分:0)
如果您不需要与原始字符串具有相同字符数的掩码(更匿名),那么这个怎么样:
@app.route('/process', methods=['POST'])
def process():
email = request.form['email']
password = request.form['password']
if password and email:
user = Db().login(email, password)
if user:
session['user'] = user
session.modified = True
return render_template("home.html", user='user')
return jsonify({'error' : 'Incorrect username and password.'})
例如,如果将匹配项替换为(?<=^.)[^@]*|(?<=@.).*(?=\.[^.]+$)
,则结果为:
***