如何用Right、Left、Mid、LEN和FIND提取指定格式字符串的目标内容
字符串数据提取问题
预期输出
| 数据 | 名字 | 姓氏 | 编号 | 日期 |
|---|---|---|---|---|
NM1*IL*1*EEKS*MILBORD****MI*123456789~ | EEKS | MILBORD | 123456789 | |
DTP*472*D9*20240212~ | 20240212 |
当前提取结果(存在错误)
| 数据 | MID函数结果 | 名字 | 编号 | 日期 |
|---|---|---|---|---|
NM1*IL*1*EEKS*MILBORD****MI*123456789~ | EEKS*MILBORD****MI*123456789~ | EEK | BORD****MI*123456789 | |
DTP*472*D9*20240212~ | 20240212~ |
当前使用的公式
- D列MID函数:
=MID(A15,FIND("NM1*IL*1*",A15)+9,LEN(A15)-FIND("NM1*IL*1*",A15)) - 提取名字:
=LEFT(D15,FIND("*",D15)-1) - 提取编号:
=RIGHT(A15,FIND("****MI*",A15)) - 提取日期:
=RIGHT(A16,FIND("*D9*",A16))
修正后的提取公式
提取名字(NM1开头行)
=MID(A1,FIND("NM1*IL*1*",A1)+9,FIND("*",A1,FIND("NM1*IL*1*",A1)+9)-FIND("NM1*IL*1*",A1)-9)
直接定位NM1*IL*1*结束位置到下一个*的区间,精准截取名字内容。
提取姓氏(NM1开头行)
=MID(A1,FIND("*",A1,FIND("NM1*IL*1*",A1)+9)+1,FIND("****MI*",A1)-FIND("*",A1,FIND("NM1*IL*1*",A1)+9)-1)
先定位名字后的第一个*,再找到****MI*的起始位置,截取两者间的姓氏内容。
提取编号(NM1开头行)
=MID(A1,FIND("****MI*",A1)+6,FIND("~",A1)-FIND("****MI*",A1)-6)
定位****MI*结束位置到波浪号~的区间,精准截取编号。
提取日期(DTP开头行)
=MID(A1,FIND("*D9*",A1)+4,FIND("~",A1)-FIND("*D9*",A1)-4)
定位*D9*结束位置到波浪号~的区间,自动排除波浪号,提取纯日期。
内容的提问来源于stack exchange,提问作者Mrs Taft
相关产品推荐
相关产品推荐

