如何使用正则表达式从Gmail API获取的HTML邮件中提取6位验证码
正则提取邮箱验证码解决方案
问题原因
你之前使用的.*([0-9]{6})存在两个问题:
.*为贪婪匹配规则,会优先匹配尽可能多的字符,仅将末尾最后6位数字归入捕获分组,无法准确定位目标验证码- 没有限定6位数字的边界,会误匹配长数字串中的连续6位片段(比如示例里的邮编、电话号码片段都会被误识别)
推荐解决方案
方案1:依赖固定邮件模板的高准确率正则
你提供的HTML中,验证码固定在font-size:36px样式的div标签内,用这个特征写正则可以100%准确定位:
font-size:36px;line-height:92px">(\d{6})</div>
匹配后取第1个捕获分组的内容,就是目标验证码。
方案2:不依赖HTML结构的通用正则
如果邮件模板可能调整,可以用数字边界限定,仅匹配独立的6位数字:
(?<!\d)\d{6}(?!\d)
这个正则通过零宽断言保证匹配到的6位数字前后都没有其他数字,不会误识别长数字串的片段,你提供的示例中用这个正则匹配会得到2个完全相同的191418,直接去重即可拿到最终结果。
内容的提问来源于stack exchange,提问作者Zakaria Shahed
相关产品推荐
相关产品推荐

