适配Google Sheets REGEXTRACT的巴西手机号正则表达式调整
在Google Sheets中用REGEXTRACT提取HTML里的首个巴西手机号
纯数字格式适配方案
如果优先提取纯数字格式的手机号(包括tel:链接里的纯数字、无分隔符的号码),假设HTML内容在A1单元格,用这个公式:
=REGEXEXTRACT(A1, "(?:tel:)?(0800\d{7}|300[34]\d{4}|400[34]\d{4}|4020\d{4}|(?!23|25|26|29|36|39|52|56|57|58|59|72|76|78)[1-9]{2}[2-5]\d{7})")
公式拆解:
(?:tel:)?:匹配可选的tel:前缀,对应示例里的电话链接0800\d{7}:匹配0800开头的7位纯数字号码300[34]\d{4}:匹配3003/3004开头的4位纯数字号码400[34]\d{4}:匹配4003/4004开头的4位纯数字号码4020\d{4}:匹配4020开头的4位纯数字号码(?!23|25|26|29|36|39|52|56|57|58|59|72|76|78)[1-9]{2}[2-5]\d{7}:匹配XXabcdefgh型纯数字,排除指定的无效区号,且第二位数字为2-5
兼容带分隔符的方案(适配Google Sheets的RE2引擎)
如果要兼容带空格、横杠、点、括号的号码,调整正则适配RE2(Google Sheets使用的引擎),公式如下:
=REGEXEXTRACT(A1, "(?:tel:)?(0800[ .]?\d{3}[ .]?\d{4}|(300[34]|400[34]|4020)[ .-]?\d{4}|(?!23|25|26|29|36|39|52|56|57|58|59|72|76|78)[1-9]{2}[ .()-]?[2-5]\d{3}[ .-]?\d{4})")
公式拆解:
0800[ .]?\d{3}[ .]?\d{4}:匹配0800开头带可选空格/点分隔的号码,比如0800 123 4567、0800.1234567(300[34]|400[34]|4020)[ .-]?\d{4}:匹配XXXXabcd型带可选空格/点/横杠分隔的号码,比如3003-1234、4004 5678(?!23|25|26|29|36|39|52|56|57|58|59|72|76|78)[1-9]{2}[ .()-]?[2-5]\d{3}[ .-]?\d{4}:匹配XXabcdefgh型带可选分隔符的号码,比如(11)2345-6789、11 2345 6789
示例验证
拿你给的三个例子测试:
- 示例1:
<a href="tel:1123456789" class="btn-tel">(11) 2345-6789</a>→ 纯数字方案返回1123456789;兼容方案返回(11) 2345-6789,如果要转纯数字,套个REGEXREPLACE:=REGEXREPLACE(REGEXEXTRACT(A1, "上面的兼容正则"), "[^0-9]", "") - 示例2:
<strong>3003-1234</strong>→ 纯数字方案返回30031234;兼容方案返回3003-1234 - 示例3:
<a _ngcontent-iqq-c82="" href="tel:30031234" class="ng-tns-c82-0">3003-1025 </a>→ 纯数字方案返回30031234;兼容方案返回3003-1025
注意点
Google Sheets用的是RE2正则引擎,不支持PCRE里的一些高级语法(比如复杂嵌套的环视),所以调整后的正则尽量简化了逻辑,确保能正常运行。如果需要统一输出纯数字,提取后用REGEXREPLACE(结果, "[^0-9]", "")去掉所有非数字字符就行。
内容的提问来源于stack exchange,提问作者Aps
相关产品推荐
相关产品推荐

