Foxtable(狐表)用户栏目专家坐堂 → 正则表达式修改


  共有2884人关注过本帖树形打印复制链接

主题:正则表达式修改

帅哥哟,离线,有人找我吗?
zsxx999ja
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:215 积分:2312 威望:0 精华:0 注册:2020/10/3 6:58:00
正则表达式修改  发帖心情 Post By:2021/3/13 9:29:00 [只看该作者]

下面是从短信内容提取日期的正则表达式,有时年份用的是两位,有时四位,月份也可能为1位或两位,日期也可能为1位或2位,下面的表达式如何改?



If e.DataCol.Name = "SmsBody" Then '短信内容
    If e.DataRow.IsNull("SmsBody") Then ''短信内容是否为空
        e.DataRow("会议时间") = Nothing '如果为空,则清除会议时间
    Else
        
        Dim str As String = e.DataRow("SmsBody")
        Dim part As String = "\d{4}年\d{1,2}月\d{1,2}日"
        If System.Text.RegularExpressions.Regex.Ismatch(str, "\d{4}年\d{1,2}月\d{1,2}日") = True  Then
            Dim mc As object = System.Text.RegularExpressions.Regex.Matches(str, "\d{4}年\d{1,2}月\d{1,2}日")
            Dim rq As String = mc(0).value
            Output.show(rq)
            rq = rq.Replace("年","-").replace("月","-").replace("日","-").Trim("-")
            Dim rq2 As Date
            If Date.TryParse(rq, rq2) Then '如果转换成功
                e.DataRow("会议时间") = rq2   ' Output.Show(d) '输出转换结果
            Else
                e.DataRow("会议时间") = Nothing  'Output.Show("无效日期格式") '给出错误提示
            End If
        End If
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
zsxx999ja
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:215 积分:2312 威望:0 精华:0 注册:2020/10/3 6:58:00
  发帖心情 Post By:2021/3/13 9:33:00 [只看该作者]

如果短信中的年省略了没有写,就默认为2021年,要提取出日期,代码又如何改写?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109720 积分:558310 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/13 14:29:00 [只看该作者]


Dim part As String = "((?<!\d)((\d{2,4}(\.|年|\/|\-))((((0?[13578]|1[02])(\.|月|\/|\-))((3[01])|([12][0-9])|(0?[1-9])))|(0?2(\.|月|\/|\-)((2[0-8])|(1[0-9])|(0?[1-9])))|(((0?[469]|11)(\.|月|\/|\-))((30)|([12][0-9])|(0?[1-9]))))|((([0-9]{2})((0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))(\.|年|\/|\-))0?2(\.|月|\/|\-)29))日?(?!\d))"
Dim str As String = "sdfd dsfdsf ds 2024年12月15日 sdf24-12-31sdf sdf"
Output.Show( System.Text.RegularExpressions.Regex.Ismatch(str, part ) )

Dim rgx = new System.Text.RegularExpressions.Regex(part , System.Text.RegularExpressions.RegexOptions.IgnoreCase)

For Each  match As System.Text.RegularExpressions.Match In rgx.Matches(str)
    Output.Show(match.Value )
Next

 回到顶部