首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串vba excel中的匹配日期模式

字符串vba excel中的匹配日期模式
EN

Stack Overflow用户
提问于 2013-03-14 20:36:08
回答 3查看 4.8K关注 0票数 1

编辑:,因为我的字符串变得越来越复杂,看起来像/问题/标记/正则表达式是唯一的方法。我在这方面没有太多的经验,你的帮助是非常感谢的。

基本上,根据我在web上所读到的内容,我构造了下面的exp以尝试在我的示例字符串中匹配:

“我的超长字符串2012年3月12日就在这里2015年4月23日”0-9 + a-zA-Z + 0-90-9

试着用这个密码。我没有匹配的。任何关于regexp教程的好链接都非常感谢。

代码语言:javascript
复制
  Dim re, match, RegExDate
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(^[0-9][0-9] + [a-zA-Z] + [0-9][0-9][0-9][0-9]$)"
    re.Global = True

    For Each match In re.Execute(str)
        MsgBox match.Value
        RegExDate = match.Value
        Exit For
    Next

谢谢

EN

回答 3

Stack Overflow用户

发布于 2013-03-15 23:52:44

此代码使用Regexp验证来自DateValue的实际日期,以增强健壮性。

代码语言:javascript
复制
Sub Robust()
Dim Regex As Object
Dim RegexMC As Object
Dim RegexM As Object
Dim strIn As String
Dim BDate As Boolean
strIn = "My very long long string 12Mar2012 is right here 23Apr2015 and 30Feb2002"
Set Regex = CreateObject("vbscript.regexp")
With Regex
 .Pattern = "(([0-9])|([0-2][0-9])|([3][0-1]))(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\d{4})"
 .Global = True
If .test(strIn) Then
   Set RegexMC = .Execute(strIn)
   On Error Resume Next
   For Each RegexM In RegexMC
   BDate = False
   BDate = IsDate(DateValue(RegexM.submatches(0) & " " & RegexM.submatches(4) & " " & RegexM.submatches(5)))
   If BDate Then Debug.Print RegexM
   Next
   On Error GoTo 0
End If
End With
End Sub
票数 3
EN

Stack Overflow用户

发布于 2013-03-15 16:44:51

谢谢你的帮助!我用这个简单的代码解决了我的问题。

代码语言:javascript
复制
Dim rex As New RegExp
Dim dateCol As New Collection
rex.Pattern = "(\d|\d\d)(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(\d{4})?"
rex.Global = True

For Each match In rex.Execute(sStream)
    dateCol.Add match.Value
Next

请注意,在我这一边,我确信我在字符串中得到了有效日期,所以reg表达式很简单。

伊利亚

票数 1
EN

Stack Overflow用户

发布于 2013-03-14 21:08:55

下面是我所做的一个快速尝试。这还远远不够完美。

基本上,它把字符串分成几个字。在循环遍历单词时,它会切断任何标点符号(句号和逗号,您可能需要添加更多)。

在处理项目时,我们尝试从其中删除每个月的名称。如果字符串变短,我们可能会有个约会。

它检查最后字符串的长度是否正确(5或6个字符,1或2+4的日期和年份)

您可以(或者也可以)检查以查看所有的数字。

代码语言:javascript
复制
Private Const MonthList = "JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC"
Public Function getDates(ByVal Target As String) As String
Dim Data() As String
Dim Item As String
Dim Index As Integer
Dim List() As String
Dim Index2 As Integer
Dim Test As String
Dim Result As String

    List = Split(MonthList, ",")
    Data = Split(Target, " ")
    Result = ""

    For Index = LBound(Data) To UBound(Data)
        Item = UCase(Replace(Replace(Data(Index), ".", ""), ",", ""))
        For Index2 = LBound(Data) To UBound(Data)
            Test = Replace(Item, List(Index2), "")
            If Not Test = Item Then
                If Len(Test) = 5 Or Len(Test) = 6 Then
                    If Result = "" Then
                        Result = Item
                    Else
                        Result = Result & ", " & Item
                    End If
                End If
            End If
        Next Index2
    Next
    getDates = Result
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15419652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档