Office365 Excel技术问询:从字符串中提取独立4位数字
在Office365 Excel中提取独立的4位数字
针对你描述的需求——从无固定格式的混合字符串里提取独立的4位数字(排除和字母连在一起的,比如5000FT里的5000),而且每个目标字符串里只有一个符合要求的4位数字,我有两个实用方法推荐:
方法1:用REGEXEXTRACT(简洁高效,Office365专属)
Office365的REGEXEXTRACT函数支持正则表达式,正好可以精准匹配“独立的4位数字”。正则里的\b代表单词边界,能确保数字前后不是字母/数字(也就是独立存在的),\d{4}匹配连续4个数字。
公式示例(假设目标字符串在A1单元格):
=REGEXEXTRACT(A1,"\b\d{4}\b")
验证你的示例:
- 对于
"16016KT 9999 SCT030",会提取9999(唯一独立的4位数字) - 对于
"PROB30 0500 FG BKN001",会提取0500 - 对于
"MOD TURB BLW 5000FT TILL302300",5000因为和FT连在一起,没有单词边界,不会被匹配;如果是TILL 3023这种情况,会提取3023 - 对于
"INTER 6000 SHRA SCT015",会提取6000
这个方法的优势是代码短、易理解,而且能自动处理数字在字符串开头/结尾的情况(比如"9999 ABC"或"ABC 9999"都能正确提取)。
方法2:不用正则的数组公式(兼容场景可选)
如果出于某些原因不想用正则,也可以用数组公式组合实现:
=TEXTJOIN("",TRUE,FILTER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),4),ISNUMBER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),4)+0)*(MID(A1,MAX(1,ROW(INDIRECT("1:"&LEN(A1)))-1),1)=" ")*(IFERROR(MID(A1,ROW(INDIRECT("1:"&LEN(A1)))+4,1)," ")=" ")))
原理说明:
MID(A1,ROW(...),4):逐个提取字符串中每个位置开始的4个字符ISNUMBER(...):判断提取的4个字符是否为纯数字MID(...)=" ":判断提取的4位数字的前一个字符(或字符串开头)和后一个字符(或字符串结尾)是否为空格,确保数字是独立的FILTER筛选出符合条件的4位数字,TEXTJOIN合并结果(因为只有一个符合的,所以直接得到目标数字)
这个公式虽然能实现需求,但比正则方法繁琐很多,所以优先推荐方法1。
内容的提问来源于stack exchange,提问作者Stitch




