写一个EXCEL公式,在一段字符串里,找到以 "DA"、"DZ"、"MP" 为前缀的子串和它们后面的10位数字.
时间: 2023-07-07 18:28:19 浏览: 54
可以使用以下公式来实现:
```
=FILTERXML("<root><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></root>","//s[starts-with(., 'DA') or starts-with(., 'DZ') or starts-with(., 'MP')]/text()")&FILTERXML("<root><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></root>","//s[starts-with(., 'DA') or starts-with(., 'DZ') or starts-with(., 'MP')]/following-sibling::s[1]/text()")
```
其中,A1是包含字符串的单元格地址。这个公式使用FILTERXML函数将字符串分割成单词,然后筛选出以"DA"、"DZ"或"MP"为前缀的单词,并且取出它们后面的10位数字。最后将这些子串和数字组合成一个数组输出。
相关问题
上面公式没有体现寻找"DA"和"MP"为前缀的子串后面的10位数字
非常抱歉,我理解错误了你的意思。如果你需要同时提取以"DA"、"DZ"和"MP"为前缀的子串后面的10位数字,可以使用以下公式:
```
=IFERROR(MID(C2,FIND("DA",C2)+2,10),"") & IFERROR(MID(C2,FIND("DZ",C2)+2,10),"") & IFERROR(MID(C2,FIND("MP",C2)+2,10),"")
```
这个公式会使用三个MID函数来分别提取以"DA"、"DZ"和"MP"为前缀的子串后面的10位数字,并将它们合并成一个字符串输出。如果某个前缀的子串不存在或后面不足10位数字,对应的输出会留空。
请注意,这个公式假设符合要求的子串后面都恰好有10位数字。如果实际情况不是这样,可能需要稍微修改一下公式中的参数。
报错#NAME?,C2格子里以 "DA"、"DZ"、"MP" 为前缀的子串和它们后面的数字是一起的,不会有空格
非常抱歉,我的回答中的公式仍然存在错误。
以下是一个新的公式,用于查找字符串中以 "DA"、"DZ"、"MP" 为前缀的子串,并提取前缀和后面的10位数字:
`=TEXTJOIN(", ",TRUE,IF(ISNUMBER(SEARCH({"DA","DZ","MP"},C2)),LEFT(C2,2)&MID(C2,SEARCH({"DA","DZ","MP"},C2)+2,10),""))`
这个公式与之前的公式相比,去掉了处理空格的部分,直接提取以 "DA"、"DZ"、"MP" 为前缀的子串中的前缀和后面的10位数字,并使用 TEXTJOIN 函数将提取出的所有字符串以逗号分隔合并成一个字符串,如果没有找到任何字符串,则返回空字符串。
如果该公式仍然报错,请检查文档中是否有名为 TEXTJOIN 的自定义函数或者依赖于 Office 365 的特定函数。如果是这种情况,可以使用 CONCATENATE 函数代替 TEXTJOIN 函数,例如:
`=IF(ISNUMBER(SEARCH({"DA","DZ","MP"},C2)),LEFT(C2,2)&MID(C2,SEARCH({"DA","DZ","MP"},C2)+2,10),"") & IF(ISNUMBER(SEARCH({"DA","DZ","MP"},MID(C2,FIND(" ",C2)+1,LEN(C2)-FIND(" ",C2))))," "&LEFT(MID(C2,FIND(" ",C2)+1,LEN(C2)-FIND(" ",C2)),2)&MID(MID(C2,FIND(" ",C2)+1,LEN(C2)-FIND(" ",C2)),3,10),"")`
希望这个公式能够正确地提取出你需要的字符串。如果你还有任何问题,请随时让我知道。