2012-06-29 23 views
0

我想找到一個字符串包含已知子(用逗號分隔)的重複序列的重複序列,別無其他,並且返回是否屬實這是事實;否則爲false。例如:子字符串是「0,8」使用正則表達式來確定字符串包含逗號分隔符,沒有別的特定子

字符串A:「0,8,0,8,0,8,0,8」返回true 字符串B:「0,8,0,8, 1,0,8,0" 返回false,因爲‘1’

我使用C#字符串函數蘊含嘗試,但它不適合我的要求。我對正則表達式完全陌生,但我覺得它應該足夠強大來做到這一點。我應該用什麼RegEx來做到這一點?

+0

爲什麼不只是一個簡單的'String.Split'? –

+4

實際上,「0,8,0,8 ...」不是由_just_「0,8」子串組成的。之間有逗號。所以,只要檢查它是由「0,8」的子串組成的,實際上應該返回「false」。 – voithos

+0

'^ 0,8(,0,8)* $' - 這裏是 – zerkms

回答

3

包含什麼一個字符串,但一個給定的子串的重複數目(可能爲他們中的零,從而導致一個空字符串)該模式是\A(?:substring goes here)*\z。該\A字符串的開頭匹配,\z字符串的結束,以及(?:...)*匹配匹配冒號和右括號之間的事的東西0或多個副本。

但您的字符串實際上並不匹配\A(?:0,8)*\z,因爲額外的逗號;一個匹配的例子是「0,80,80,80,8」。你需要用\A0,8(?:,0,8)*\z之類的東西明確地說明逗號。

你可以建立在C#這樣的事這樣的:

string OkSubstring = "0,8"; 
string aOk = "0,8,0,8,0,8,0,8"; 
string bOK = "0,8,0,8,1,0,8,0"; 

Regex OkRegex = new Regex(@"\A" + OkSubstring + "(?:," + OkSubstring + @")*\z"); 
OkRegex.isMatch(aOK); // True 
OkRegex.isMatch(bOK); // False 

那硬編碼的逗號分隔符;你可以使它更通用。或者,也許你只需要文字正則表達式。無論哪種方式,這是你需要的模式。

編輯根據Mike Samuel的建議更改了錨點。

+0

@MikeSamuel - 好點;我太習慣用線條思考。更正! –

相關問題