Excel:从文本字符串中提取项目编号(不同位置和长度)

Excel:从文本字符串中提取项目编号(不同位置和长度)

在 Excel 电子表格中,我有一列混合文本字符串,其中包含项目主数据(类型、项目编号、地址、主题等)。我需要从此字符串中自动提取项目编号。一个问题是该数字位于字符串的不同位置。我猜这会使使用 =MID() 变得困难。另一个问题是该数字的长度各不相同。

3 个字符串的示例:

发票号2014-0406-1 Main Street,John Nelson,购买
税projno 2015-0021拒绝申请
gl oldroad 10案例2014-0306-003 HUKO,JFR

从我需要提取的字符串中:

2014-0406-1
2015-0021
2014-0306-003

我希望这可以自动完成。提前感谢您的帮助!:)

答案1

看起来,当您感兴趣的字符串可以直接附加到文本(如您的第一个例子)时,这实际上可能有点困难。如果项目编号的末尾不是这种情况,并且它们总是以空格结尾,并且您同意使用从 2000 年起考虑项目编号的解决方案,您可以尝试:

=MID(A1,SEARCH("20??-",A1),FIND(" ",A1,SEARCH("20??-",A1))-SEARCH("20??-",A1))

请注意,使用 Microsoft365 可以将其简化为:

=LET(X,SEARCH("20??-",A1),MID(A1,X,FIND(" ",A1,X)-X))

如果这太过简化,您可能会遇到类似“test-test test2014-0406-5test 2020”等极端情况,您可以尝试:

=@LET(X,MID(A1,SEQUENCE(LEN(A1)),1),FILTERXML("<t><s>"&CONCAT(IF(ISNUMBER(FIND(X,"0123456789-")),X,"</s><s>"))&"</s></t>","//s[contains(., '-')][translate(.,'-','')*0=0]"))

在此处输入图片描述


编辑:

请注意,您也可以使用正则表达式,但这需要您使用 VBA。也许以下 UDF 可以做到:

Function GetProjectID(str As String, pat As String) As String

With CreateObject("vbscript.regexp")
    .Pattern = pat
    If .Test(str) Then GetProjectID = .Execute(str)(0)
End With

End Function

调用方式=GetProjectID(A1,"\d+-\d+(?:-\d+)*")

相关内容