excel - 识别模式并提取子字符串
问题描述
我在 Excel 中有数千行,其中随机文本中有诸如“31.12.2019-30.12.2020”之类的句点。
我需要从每一行中提取这个子字符串并将其放在一个单独的单元格中。
子字符串始终具有相同的模式,但文本不同,它可以位于文本中的任何位置。
是否可以使用公式或通过 VBA 识别此模式:“XX.XX.20XX-XX.XX.20XX”,然后返回子字符串?
我无法通过谷歌找到公式。
解决方案
1) - Excel 公式
如果您使用 Excel 公式路线,请使用 in 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")
如您所见,该模式非常简单:
结果:
推荐阅读
- php - Laravel Mocking Repository Controller - 来自 Mockery\Interface 的方法“all”应该被准确地调用 1 次,但被调用 0 次
- ruby-on-rails - 尝试更新rails列数组类型时出现奇怪的格式
- mysql - CakePHP 3 - MySQL 'BIGINT' 字段在实体中未正确处理
- python - 如何停止在后台 shell 中运行的 python 程序
- c# - SignalR 客户端在启动连接时抛出错误
- java - 安装后菜单在 Eclispe SDK 中不可见
- css - elementor网站上mac中的字体系列覆盖
- java - 如何根据GZIP的压缩字节数组得到原始数组的长度?
- postgresql - PostgreSQL 10 逻辑复制 - 是否可以克隆表?
- c - sizeof('0') 的值是多少?