簡體   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