我对 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;
但每次我的值(value)都是“”。有人可以帮我看看我做错了什么吗?
提前致谢。
最佳答案
这个问题非常微妙。您的搜索字符串中有一个隐藏的控制字符。每个连字符之前和之后都有一个 0x200e
或 LEFT-TO-RIGHT 字符。我通过复制您的代码并检查字节来确认这一点。您还可以通过将光标放在 -
之前并按退格键来测试这一点。
您的模式字符串还包含这些隐藏的控制字符,位于第一个连字符之前以及第二个连字符之前和之后。
一旦我从搜索字符串和模式字符串中删除了该字符的所有实例,模式就会正确匹配。
最好的办法是在尝试执行其他操作之前从输入中删除这些字符。如果您按照其他人的建议进行正则表达式或传统日期时间解析,则这适用。这是从字符串中删除这些字符的最简单方法:
input = input.Replace(char.ConvertFromUtf32(0x202e).ToString(), string.Empty);
关于c# - RegEx.Match 不返回预期的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218610/