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

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

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

我在excel中有成千上万的行,其中在随机文本中有类似“ 31.12.2019-30.12.2020”的句点,我需要从每一行中提取此子字符串并将其放在单独的单元格中。子字符串始终具有相同的模式,但是文本本身始终是不同的,并且可以在文本内的任何位置。

也许可以通过公式或通过VBA来准确识别以下模式:“ XX.XX.20XX-XX.XX.20XX”,然后返回子字符串?但是我找不到通过谷歌搜索的公式,但是也许你们中的任何一个以前都做过?

enter image description here

最好的问候AnSa

excel vba date search excel-formula
2个回答
0
投票

[1)-Excel公式

如果您使用Excel公式路线,请在B2中使用:

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

拖动...

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


2)-VBA

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

我可以想象您会使用一个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")中称呼它>>

您可以看到该模式非常简单:

“正则表达式可视化”


结果:

] >>

enter image description here

另一个公式解决方案。

B1中,公式向下复制:

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

enter image description here


0
投票

另一个公式解决方案。

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