我正在学习一些正则表达式,我需要帮助吐出由我的正则表达式代码生成的匹配。我在这里发现了一些非常有用的资源来输出任何不匹配的东西,但我想只输出匹配的单元格部分。我正在寻找单元格中的日期,可能是单个yyyy日期或yyyy-yy等(如下面的示例数据所示)。
示例数据:
1951/52
1909-13
2005-2014
7 . (1989)-
1 (1933/34)-2 (1935/36)
1979-2012/2013
当前功能代码:(从此处的现有帖子中找到的代码段,但返回替换值而不是匹配的内容)
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "([12][0-9]{3}[/][0-9]{2,4})|([12][0-9]{3}[-][0-9]{2,4})|([12][0-9]{3})"
答案 0 :(得分:1)
您可以使用
\b[12][0-9]{3}(?:[,/-][0-9]{2,4})*\b
请参阅regex demo
注意如果您对整个单词搜索不感兴趣,可能会删除\b
。
模式详细信息:
\b
- 前导词边界(前面的char必须是非单词char或字符串的开头)[12][0-9]{3}
- 1
或2
后跟任意3位数字(?:[,/-][0-9]{2,4})*
- 零个或多个序列((?:...)*
):
[,/-]
- ,
,/
或-
字符[0-9]{2,4}
- 任意2到4位\b
- 尾随单词边界(必须有非单词char或后面的字符串结尾)。使用RegExp#Execute
获取所有这些值的示例VBA代码:
Sub FetchDateLikeStrs()
Dim cellContents As String
Dim reg As regexp
Dim mc As MatchCollection
Dim m As match
Set reg = New regexp
reg.pattern = "\b[12][0-9]{3}(?:[,/-][0-9]{2,4})*\b"
reg.Global = True
cellContents = "1951/52 1909-13 2005-2014 7 . (1989)- 1 (1933/34)-2 (1935/36) 1979-2012/2013 1951,52"
Set mc = reg.Execute(cellContents)
For Each m In mc
Debug.Print m.Value
Next
End Sub