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