2014-04-10 66 views
0

我想寫的正則表達式如下模式逗號分隔的時間正則表達式c#?

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

我是新手使用正則表達式,所以學習Quick start regex tutorial後,我寫了這個:

(([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 

任何人都可以請h讓我讓這個正則表達式按預期工作?

回答

0
\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"; 
+0

我想你的正則表達式,但它匹配'02:00#01:00,'也這是無效的字符串,因爲我在我的問題 – user1740381

+0

上面提到你有沒有更清晰的規格,哪些類型的小時和分鐘是好的,不好嗎? –

+0

在我的問題中,我提到了一些有效和無效的字符串,請檢查它 – user1740381

2

你可以做,沒有使用正則表達式,如:

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, 
相關問題