识别模式并提取子串
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)
我在 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)