2016-11-24 67 views
2

我有一般形式的項目編號:1-3位數字後跟可選小寫字符後面跟隨可選單個數字後面跟着一個單詞後跟可選單個數字。 例如,以下所有的都是合法的項目編號:"21aRepair", "04iMod2", "04d1RR", "5", "07", "8a", "09b", "04g3"c#正則表達式捕獲一個捕獲後的單詞組

我需要向上打破這些項目號到窗體的組件:隨後可選的單 組分1)1-3位數字加可選的小寫字符數字 組分2)一個字 組分3)任選的單個數字

例如:

"21aRepair"應該成爲"21a", "Repair", null

"04iMod2"應該成爲"04i", "Mod", "2"

"04d1RR"應該成爲"04d1", "RR", null

"5"應該成爲"5", null, null

我有以下regex: (^\d{1,3}[a-z]?\d?)工作正常的部件1.我已經嘗試了組件2的幾個選項都沒有成功。

我認爲以下幾點:(?<=^\d{1,3}[a-z]?\d?)([a-zA-Z]*\d?)會工作。將向後看"(?<="添加到組件1模式應該說「採取組件1之後的任何內容」,並且組([a-zA-Z]*\d?)應匹配組件2和3.這不會產生預期的結果。有人能告訴我我要去哪裏嗎?

+3

中間一個單詞的第一個字符總是大寫? –

回答

3

您可以考慮使用

^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$ 

regex demo

詳細

  • ^ - 字符串的開始
  • (\d{1,3}[a-z]?\d?) - 第1組:組件,1至3數字,一個可選的小寫ASC II號和一個可選的數字
  • ([a-zA-Z]*) - 第2組:字,零個或多個ASCII字母
  • (\d?) - 第3組:一個可選的數字
  • $ - 串

末在C#中使用

var m = Regex.Match(str, @"^(\d{1,3}[a-z]?\d?)([a-zA-Z]*)(\d?)$"); 

檢查,如果m.Success,並訪問三個GROU ps使用m.Groups[n].Value其中n是組ID。

+0

=)與我所用的相同 – bixarrio

+0

根據「單詞」的含義可能會有變化。 –

+0

太棒了!謝謝! –