繁体   English   中英

RegEx.Match不返回预期的字符串

[英]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;

但是每次我获得“”价值时。 有人可以帮我做错什么吗?

提前致谢。

这个问题非常微妙。 您的搜索字符串中有一个隐藏的控制字符。 每个连字符前后都有一个0x200eLEFT-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM