2013-02-13 172 views
-1

我真的不明白正則表達式如何放在一起,所以這裏是我的問題。正則表達式匹配字符串與兩種分隔符類型分隔

我有一個分隔字符串爲1,3;5,1;6,4等等。基本上我在這裏存儲購物車的產品ID1,3將意味着我有一個產品編號爲"1"和數量3。產品(帶卷)用";"分隔。

我需要做的是把一個正則表達式,將驗證這樣的字符串。只有正數是有限制的,比如說從1到10000.

有沒有人有解決方案?

+0

讓我們來說說你試過了什麼? – 2013-02-13 20:36:15

+1

歡迎,如你所見,你不會有太多的運氣,要求徹底解決還沒有嘗試過的問題。你應該做的是嘗試它你自己,當你來到可以在一個具體的問題,回報掛接一個障礙點,你可能會得到很多幫助。 – ChiefTwoPencils 2013-02-13 20:54:35

回答

2

此正則表達式模式上分號分隔的數對,其中一個逗號每對的成員分離相匹配,並且每個數爲1〜10000:

^([1-9]\d{0,3}|10000),([1-9]\d{0,3}|10000)(;([1-9]\d{0,3}|10000),([1-9]\d{0,3}|10000))*$ 
必須有至少一對。如果只有一對,則不會有分號。分號只能出現在相鄰對之間。

+0

非常感謝。那正是我所期待的。 – user2069866 2013-02-14 06:57:13

+0

不客氣! – kol 2013-02-14 07:29:29

1

我不確定如果我理解你的格式是如何工作的,但是如果每件事都必須有ID [ID],[volume]; [ID],[volume];那麼我會說使用像一個正則表達式:

(([0-9]),([0-9]);)+ 

但你的1,3;5,1;6;4例子似乎並沒有遵循這一格式,所以如果你想要的音量是可選的,那麼:

(([0-9])(,[0-9])?;)+ 

應該工作。如果您想嘗試正則表達式模式的話,我會建議使用在線工具,如http://regexpal.com

3

我想你最好不要使用正則表達式這是。假設你的格式是這樣1,3;5,1;6,4(即因爲你已經在你的問題中指定其他@Rich指出的),你就應該能夠將其分割上;然後,

var input = "1,3;5,1;6,4"; 

var pairs = input.Split(';')      // ["1,3","5,1","6,4"] 
    .Select(x => x.Split(','))      // [["1","3"],["5","1"],["6","4"]] 
    .Select(x => new { Id = x[0], Volume = x[1] }); // [{ Id : "1", Volume : "3"} ...] 

foreach(var pair in pairs) 
{ 
    Console.WriteLine("Id: " + pair.Id + " Volume: " + pair.Volume); 
} 
// Id: 1 Volume: 3 
// Id: 5 Volume: 1 
// Id: 6 Volume: 4 

注意:我在這裏使用了System.Linq和匿名類型,但如果您願意,您可以不使用。

注意另:這將失敗(即拋出IndexOutOfRangeException)如果您的輸入不是預期的格式。如果您想驗證一些狡猾然後輸入一個正則表達式可能是你想要 - 其他@裏奇的回答對我來說很好。

+0

感謝您的回覆。以上運作良好。我唯一的問題是我正在閱讀cookie中的分隔字符串,並且只是想確保用戶在閱讀之前不會更改它。無論如何,@ kol給了我下面的確切正則表達式。 – user2069866 2013-02-14 06:59:19

+0

是的,如果您需要驗證某些輸入與您的格式匹配,那麼正則表達式是正確的工具。 – RichardTowers 2013-02-14 10:19:55

相關問題