识别模式并提取子串

Identify pattern and extract substring

我在 Excel 中有数千行,其中随机文本中有像“31.12.2019-30.12.2020”这样的句点。
我需要从每一行中提取这个子字符串并将其放在一个单独的单元格中。
子字符串始终具有相同的模式,但文本不同,并且可以在文本中的任何位置。

是否可以使用公式或通过 VBA 识别此模式:“XX.XX.20XX-XX.XX.20XX” 然后 return 子字符串?

我无法通过 Google 找到公式。

1) - Excel 公式

如果你走Excel公式路线,那么在B2中使用:

=MID(A2,SEARCH("??.??.20??-??.??.20??",A2),21)

往下拖...

SEARCH 函数支持通配符,例如 ?(代表任何字符),因此 return 是感兴趣的子字符串的起始位置。在 MID 中使用时,我们实际上可以提取此子字符串。


2) - VBA

根据我上面的评论,这也可以通过正则表达式巧妙地完成(参见@Warcupine 提供的link)。正则表达式使您的模式更加精确(例如,我们可以搜索数字而不是任何字符)。

我可以想象你会使用一个 UDF,你可以在其中 link 文本和你的有效模式,例如:

Public Function RegExtract(Txt As String, Pattern As String) As String

With CreateObject("vbscript.regexp")
    '.Global = True
    .Pattern = Pattern
    If .test(Txt) Then
        RegExtract = .Execute(Txt)(0)
    Else
        RegExtract = "No match found"
    End If
End With

End Function

您可以在 B2=RegExtract(A2,"\d\d\.\d\d\.20\d\d-\d\d\.\d\d\.20\d\d")

中调用它

如您所见,模式非常简单:


结果:

另一个公式解决方案。

B1中,公式复制下来:

=MID(A2,FIND("-",A2)-10,21)