以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 正则表达式修改 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=161323) |
-- 作者:zsxx999ja -- 发布时间: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 -- 发布时间:2021/3/13 9:33:00 -- 如果短信中的年省略了没有写,就默认为2021年,要提取出日期,代码又如何改写? |
-- 作者:有点蓝 -- 发布时间: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
|