![](/img/trans.png)
[英]How to use a regex in C# to match multiple patterns with whitespace or characters
[英]Match multiple patterns with a Regex
我有3组:时间,日期和别针。 我可以让这一行匹配这一行:
26/06/2012 33:06:12a_user_logged_in,3412234,2,3,512,3 33:06:12a_user_logged_in,3412234,2,3,512,3,26 / 06/2012 26/06/2012 a_user_logged_in_at,33:06:12, 3412234,2,3,512,3
我希望将26/06/2012
作为date
组, 33:06:12
作为time
,将3412234
作为pin
组。
我已经成功地做到了这一点,但只有线条必须像第一个一样处于某种模式
(?<date>[\d]+/[\d]+/[\d]+) (?<time>[\d]+:[\d]+:[\d]+)([ |,][a-zA-z]*)+,(?<pin>[\d]{4,10}).+
但是当我将这种模式应用于其他两种线形式时,它并不匹配。
我的问题是,无论线形是什么,如何匹配时间,日期和引脚组?
只需添加|
你的表达之间:
(?<date>[\d]+/[\d]+/[\d]+)|(?<time>[\d]+:[\d]+:[\d]+)|(?<pin>(?<=[^/])[\d]{4,10})
如果您不想同时验证模式,可以从字符串的开头开始使用前瞻 。 由于它们实际上并没有消耗任何东西,因此在完成一个前瞻后引擎会跳回到开始状态。 因此,三场比赛的顺序无关紧要:
^(?=.*(?<date>\d+/\d+/\d+))(?=.*(?<time>\d+:\d+:\d+))(?=.*,(?<pin>\d{4,10}))
请注意,
在pin
组前面。 否则,您可能会将年份作为引脚(因为它也是4位数)。
但话又说回来,为了您的代码的可读性,您可能希望将其分成三种模式(这也避免了捕获,因此它甚至可能不会那么慢):
Pattern for date: \d+/\d+/\d+
Pattern for time: \d+:\d+:\d+
Pattern for pin: (?<=,)\d{4,10}
这些只会在整场比赛中为您提供所需的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.