我正在阅读文本文件。大多数这些文件的开头都有日 - 月 - 年小时:分钟这里的一些文字 ...如下所示
BaseFragment
我为这个
写了一个正则表达式 28-09-2012 12:46 Some text here.....
这很有效。它读取以连字符 - 分隔的日,月和年,以及以冒号:分隔的小时和分钟,然后使用反斜杠s \ s之间的空格即可。我想要的是更改正则表达式,以便在将来出现在其他文件中时可以选择包括秒和毫秒,如下所示..
(?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2})))\s(?<textFileEntry>.*)
我写过这个正则表达式,但它不正确。
28-09-2012 12:46:12:123 Some text here.....
我虽然。?允许可选用途?任何人都可以看到我在正则表达式中缺少的东西吗?谢谢。
答案 0 :(得分:3)
您正在转义点(如此\.
),因此您匹配文字点,您只需将点更改为冒号,如下所示:
(?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2})(?<seconds>:\d{2})?(?<milli>:\d{0,3})?))\s(?<logEntry>.*)
<强> Working demo
另请注意,我添加?
将秒和毫米设置为可选:
(?<seconds>:\d{2})?(?<milli>:\d{0,3})?
^-- here and here -^
顺便说一下,如果你真的想使用.
作为通配符,那么任何字符都可以用作第二个/铣削分隔符。
您可以清楚地看到下面的模式:
答案 1 :(得分:1)
.
只匹配一个字符,除非你将其转义(你做过),在这种情况下它只匹配字符.
。
此外,如果你想让整个组都是可选的,那就使用(:(?<milli>\d{0,3}))?
,这样就可以在你希望选择的整个parathesis之后使用asteriks。
答案 2 :(得分:0)
联邦有几乎是正确的,但他的正则表达式抓住冒号:在秒和毫秒内的字符 - 使用此https://regex101.com/r/bU9bJ6/1
(?<date>(?<day>\d{1,2})-(?<month>\d{1,2})-(?<year>(?:\d{4}|\d{2}))\s(?<time>(?<hour>\d{2}):(?<minutes>\d{2}))(:\:?(?<seconds>\d{2})?)?\:?(?<mili>\d+)?)\s(?<logEntry>.*)