簡體   English   中英

以逗號分隔的時間正則表達式#?

[英]Comma-separated time regex c#?

我正在嘗試為以下模式編寫正則表達式

pattern = "Time hh:mm separated by comma + # + Time hh:mm separated by comma";

我是正則表達式的新手,所以在學習了快速啟動正則表達式教程之后 ,我寫了這樣的:

(([0-1][0-9]|[2][0-3]):([0-5][0-9]))+(,+(([0-1][0-9]|[2][0-3]):([0-5][0-9]))
?+,*)*+(#)+(([0-1][0-9]|[2][0-3]):([0-5][0-9]))+(,+(([0-1][0-9]|[2][0-3]):([0-5] 
[0-9]))?+,*)*

這個正則表達式有一些問題。 它匹配一些無效的字符串,如:

 - 02:00,#03:00

 - 02:00#03:00,

有效字符串:

 - 02:00#03:00

 - 02:00,04:00,06:00#03:00

 - 02:00#03:00,06:00

它也不能正確創建組,我想按以下順序創建組:

如果字符串是02:00,04:00,06:00#03:00那么組應該是:

 - 02:00
 - 04:00
 - 06:00
 - #
 - 03:00

誰能幫助我讓這個正則表達式按預期工作?

您可以在不使用REGEX的情況下執行此操作:

string str = "02:00,04:00,06:00#03:00";
TimeSpan temp;
bool ifValid = str.Split(new[] { ',', '#' })
                  .All(r => TimeSpan.TryParseExact(r, @"hh\:mm",CultureInfo.InvariantCulture, out temp));

您可以將其解壓縮到以下函數:

public bool CheckValid(string str)
{
    TimeSpan temp;
    return str.Split(new[] { ',', '#' })
                      .All(r => TimeSpan.TryParseExact
                                                     (r, 
                                                      @"hh\:mm", 
                                                      CultureInfo.InvariantCulture, 
                                                      out temp));
}

然后檢查工作如下:

List<string> validStrings = new List<string>
{
    "02:00#03:00",
    "02:00,04:00,06:00#03:00",
    "02:00#03:00,06:00"
};
Console.WriteLine("VALID Strings");
Console.WriteLine("============================");
foreach (var item in validStrings)
{
    Console.WriteLine("Result: {0}, string: {1}", CheckValid(item), item);
}

Console.WriteLine("INVALID strings");
Console.WriteLine("============================");
List<string> invalidStrings = new List<string>
{
    "02:00,#03:00",
     "02:00#03:00,",
};

foreach (var item in invalidStrings)
{
    Console.WriteLine("Result: {0}, string: {1}", CheckValid(item), item);
}

輸出將是:

VALID Strings
============================
Result: True, string: 02:00#03:00
Result: True, string: 02:00,04:00,06:00#03:00
Result: True, string: 02:00#03:00,06:00
INVALID strings
============================
Result: False, string: 02:00,#03:00
Result: False, string: 02:00#03:00,
\s(([0-1]\d|[2][0-3]):([0-5]\d))((,(([0-1]\d|[2][0-3]):([0-5]\d)))*)#(([0-1]\d|[2][0-3]):([0-5]\d))((,(([0-1]\d|[2][0-3]):([0-5]\d)))*)\s

或者:

String time = "(([0-1]\\d|[2][0-3]):([0-5]\\d))";
String timeSequence = time + "((," + time + ")*)";
String regex = "\\s" + timeSequence + "#" + timeSequence + "\\s";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM