Excel - 识别模式并提取子字符串

问题描述 投票:0回答:1

有人知道什么是我在Excel中从单元格中提取子串的最好方法吗?

我有数千行excel中的随机文本,其中有像 "31.12.2019-30.12.2020 "这样的句号,我需要从每行中提取这个子串,并将其放在一个单独的单元格中。子串总是具有相同的模式,但文本本身总是不同的,它可以在文本中的任何地方。

也许可以用一个公式或者通过VBA来准确识别这个模式。"XX.XX.20XX-XX.XX.20XX "然后返回子串? 但我在google上找不到公式,但也许你们中的任何一个人以前做过这个?

enter image description here

最好的祝愿AnSa

excel vba date formula period
1个回答
0
投票

1) - Excel公式

如果你走的是Excel公式路线,那么就用在 B2:

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

往下拖...

SEARCH 函数支持通配符,如 ? 代表任何字符),从而返回感兴趣的子串的起始位置。当在 MID 其实我们可以提取这个子串。


2) - VBA

按照我上面的评论,这也可以通过正则表达式来实现(见 @Warcupine 提供的链接)。正则表达式允许你在模式中更加精确(例如我们可以搜索数字而不是任何字符)。

例如,我可以想象你会使用一个UDF,在这个UDF中,你可以同时链接到文本和你的有效模式。

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")

如你所见,模式很简单。

Regular expression visualization


结果:

enter image description here


0
投票

又是一个公式解

B1,公式抄下来。

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

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.