加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用正则表达式匹配多个模式

发布时间:2020-12-16 00:22:04 所属栏目:百科 来源:网络整理
导读:我有3组:时间,日期和别针.我可以让这一行匹配这一行: 26/06/2012 33:06:12a_user_logged_in,3412234,2,3,512,3 33:06:12a_user_logged_in,26/06/2012 26/06/2012 a_user_logged_in_at,33:06:12,3 我希望将26/06/2012作为日期组,33:06:12作为时间,将34122
我有3组:时间,日期和别针.我可以让这一行匹配这一行:

26/06/2012 33:06:12a_user_logged_in,3412234,2,3,512,3
33:06:12a_user_logged_in,26/06/2012
26/06/2012 a_user_logged_in_at,33:06:12,3

我希望将26/06/2012作为日期组,33:06:12作为时间,将3412234作为引脚组.

我已经成功地做到了这一点,但只有线条必须像第一个一样处于某种模式

(?<date>[d]+/[d]+/[d]+) (?<time>[d]+:[d]+:[d]+)([ |,][a-zA-z]*)+,(?<pin>[d]{4,10}).+

但是当我将这种模式应用于其他两种线形式时,它并不匹配.

我的问题是,无论线形是什么,如何匹配时间,日期和引脚组?

解决方法

如果您不想同时验证模式,可以从字符串的开头使用 lookaheads.由于它们实际上并没有消耗任何东西,因此在完成一个前瞻后引擎会跳回到开始状态.因此,三场比赛的顺序无关紧要:

^(?=.*(?<date>d+/d+/d+))(?=.*(?<time>d+:d+:d+))(?=.*,(?<pin>d{4,10}))

请注意,在引脚组前面.否则,您可能会将年份作为引脚(因为它也是4位数).

但话又说回来,为了您的代码的可读性,您可能希望将其分成三种模式(这也避免了捕获,因此它甚至可能不会那么慢):

Pattern for date: d+/d+/d+
Pattern for time: d+:d+:d+
Pattern for pin:  (?<=,)d{4,10}

这些只会在整场比赛中为您提供所需的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读