[英]RegEx.Match not returning expected string
我是C#中的正则表达式新手。 我阅读了所有可以动手的内容,并尝试提出一个正则表达式来从日志中提取日期时间值。 这就是我正在使用的:
value = Regex.Match("abc 2012-12-23 01:13:51.253",
@"\b20[0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9].\d+")
.Value;
但是每次我获得“”价值时。 有人可以帮我做错什么吗?
提前致谢。
这个问题非常微妙。 您的搜索字符串中有一个隐藏的控制字符。 每个连字符前后都有一个0x200e
或LEFT-TO-RIGHT字符。 我通过复制代码并检查字节来确认这一点。 您也可以通过将光标放在-
之前并按退格键来测试此效果。
模式字符串在第一个连字符之前,第二个连字符之前和之后也包含这些隐藏的控制字符。
一旦从搜索字符串和模式字符串中删除了该字符的所有实例,该模式就正确匹配。
最好的选择是在尝试执行其他任何操作之前,先将这些字符从输入中删除。 如果您正在执行RegEx或其他人建议的常规DateTime解析,则适用此规则。 这是从字符串中删除这些字符的最简单方法:
input = input.Replace(char.ConvertFromUtf32(0x202e).ToString(), string.Empty);
如果您只想学习正则表达式,则可以使用:
@"(^((((0[1-9])|([1-2][0-9])|(3[0-1]))|([1-9]))\x2F(((0[1-9])|(1[0-2]))|([1-9]))\x2F(([0-9]{2})|(((19)|([2]([0]{1})))([0-9]{2}))))$)"
如果这是应用程序的有效用例,则应使用DateTime.ParseExact
东西将其解析为DateTime
对象。
这是使用DateTime.ParseExact
匹配字符串的方法:
string dateString = "2012-12-23 01:13:51.253";
string format = "yyyy-MM-dd hh:mm:ss.fff";
DateTime dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);
我不确定您字符串的'abc'部分是什么,但是如果这是一个月的三个字母的缩写,则可以将格式字符串更改为:
string format = "MMM yyyy-MM-dd hh:mm:ss.fff";
这是日期时间分析的自定义格式代码的完整列表: http : //msdn.microsoft.com/zh-cn/library/8kb3ddd4.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.