2016-11-26 14 views
0

我想解析出一個文本字段中的一些日期,可能是以下格式(注意文本字段有一堆圍繞日期的其他垃圾):用不同的符號和可變數字格式的日期的正則表達式模式

//with dashes 
10-10-16 
1-5-16 
10-1-16 
1-10-16 

//with periods 
10.10.16 
1.5.16 
10.1.16 
1.10.16 

//with forward slashes 
10/10/16 
1/5/16 
10/1/16 
1/10/16 

我需要的是所有數字格式場景的一種模式。這裏是我的嘗試:。

//x.xx.xx 
Regex reg1 = new Regex (@"\(?\d{1}\)?[-/.]? *\d{2}[-/.]? *[-/.]?\d{2}") 

//xx.xx.xx 
Regex reg2 = new Regex (@"\(?\d{2}\)?[-/.]? *\d{2}[-/.]? *[-/.]?\d{2}") 

//x.x.xx 
Regex reg3 = new Regex (@"\(?\d{1}\)?[-/.]? *\d{1}[-/.]? *[-/.]?\d{2}") 

//xx.x.xx 
Regex reg4 = new Regex (@"\(?\d{2}\)?[-/.]? *\d{1}[-/.]? *[-/.]?\d{2}") 

我是新來的正則表達式,所以我要尋找一個單獨的表達式來處理所有這些場景(即數字格式的單數和雙位數的號碼 - /。之間)。

是否有一個表達式可以處理這個問題?

感謝,

回答

2

我可以建議

Regex rx = new Regex(@"\(?(?<!\d)\d{1,2}\)?[-/.]?\d{1,2}[-/.]?\d{2}(?!\d)"); 

如果你的約會分離器統一使用,使用後向引用與捕獲組:

Regex rx = new Regex(@"\(?(?<!\d)\d{1,2}\)?([-/.])\d{1,2}\1\d{2}(?!\d)"); 

regex demo 1demo 2

詳細

  • \(? - 任選(
  • (?<!\d) - 必須有當前位置之前沒有數字
  • \d{1,2} - 1或2位數字
  • \)? - 任選)
  • [-/.]? - 可選-/.
  • \d{1,2}[-/.]? - 同上。
  • \d{2} - 2位數字
  • (?!\d) - 當前位置後面必須沒有數字。

與捕獲組版本/反向引用包含([-/.]) - 與ID = 1,所述第一分離器相匹配的捕獲組,和\1是匹配捕獲到組1相同的文字(使第二分離器輸送到反向引用與第一個相同)。

+0

如果你的約會分離器統一使用,使用後向引用與捕獲組 - '正則表達式RX =新的正則表達式(@「\( ?(?!<\ d)\ d {1,2} \)([ - /。])\ d {1,2} \ 1 \ d {2}(\ d)「);??!' –

0

你也可以試試這個:\d{1,2}([-./])\d{1,2}\1\d{2}

Regex regex = new Regex(@"\d{1,2}([-./])\d{1,2}\1\d{2}");

  • \d{1,2}一個和兩個數字
  • ([-./])任何.-/
  • \1重複這種性格其他時間之間(防止匹配1.1/011-1.01
  • \d{2}匹配的是兩個數字
+0

我也考慮過發佈該模式作爲替代方案,但反向引用更具限制性,重複'[ - 。/]'字符類將在更鬆散的上下文中找到匹配項。 –

0

試試這個

\d{1,2}(-|\.|\/)\d{1,2}(-|\.|\/)\d{1,2} 
相關問題