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

标签 c# regex

我对 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)都是“”。有人可以帮我看看我做错了什么吗?

提前致谢。

最佳答案

这个问题非常微妙。您的搜索字符串中有一个隐藏的控制字符。每个连字符之前和之后都有一个 0x200eLEFT-TO-RIGHT 字符。我通过复制您的代码并检查字节来确认这一点。您还可以通过将光标放在 - 之前并按退格键来测试这一点。

您的模式字符串还包含这些隐藏的控制字符,位于第一个连字符之前以及第二个连字符之前和之后。

一旦我从搜索字符串和模式字符串中删除了该字符的所有实例,模式就会正确匹配。

最好的办法是在尝试执行其他操作之前从输入中删除这些字符。如果您按照其他人的建议进行正则表达式或传统日期时间解析,则这适用。这是从字符串中删除这些字符的最简单方法:

input = input.Replace(char.ConvertFromUtf32(0x202e).ToString(), string.Empty);

关于c# - RegEx.Match 不返回预期的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218610/

相关文章:

c# - bool 值是什么?返回类型是什么意思?

regex - 为什么/如何在将重复的任意字符与捕获组匹配时需要额外的变量?

xml - 用于缩进 XML 文件的正则表达式

JavaScript 使用正则表达式解析日志条目(没有明显的分隔符)

javascript - 为什么正则表达式使用 Angular $sce 在 "t"中查找 "Georgia"?

c# - 如何使用 Azure 服务总线实现 FIFO 主题

c# - 如何将 VerticalAlignment 设置为范围的底部?

c# - 如何列出所有月份名称,例如组合?

c# - dll 中的异常处理

python - 使用 Python 查找两个文本文件的段落中的重复关键字,并在新的文本文件中列出结果(比较它们)