2015-09-07 139 views
1

我似乎無法找出這一個。我知道可以使用一個正則表達式,但是並沒有真正的創建它們的經驗。我有日期的一個字符串,它看起來像這樣:替換分​​隔符之間的字符串中的字符 - 正則表達式

( (Mon 3:23PM EDT) ( (Thu, Sep 3) ( (Thu, Sep 3) ( (Wed, Sep 2) ( (Tue, Sep 1) ( (Mon, Aug 31) ( (Fri, Aug 28) ( (Wed, Aug 26) ( (Wed, Aug 26) ( (Fri, Aug 21) ( (Mon, Aug 17) ( (Thu, Aug 13) ( (Thu, Aug 13) 

當有字符串中的時間戳,如上面的3:23,我需要更換,與今天的日期。我得到今天的日期,我需要使用格式如下:

Calendar cal = Calendar.getInstance(); 
SimpleDateFormat necessaryFormat = new SimpleDateFormat("EE, MMM dd"); 
String todaysDate = necessaryFormat.format(cal.getTime()); 

本質的字符串應該是

((Mon, Sep 7) ((Thu, Sep 3) ((Thu, Sep 3) ((Wed, Sep 2) ((Tue, Sep 1) ((Mon, Aug 31) ((Fri, Aug 28) ((Wed, Aug 26) ((Wed, Aug 26) ((Fri, Aug 21) ((Mon, Aug 17) ((Thu, Aug 13) ((Thu, Aug 13) 

到目前爲止,我曾嘗試使用沿此線的東西,但所有它做的是去除第一塊括號之間的字符串:

String origStr = links.text().substring(0, links.text().indexOf("("))+ 
      links.text().substring(links.text().indexOf(")")+"))".length()); 
+1

類似的replaceAll( 「\ d +:\ d + [AP] M」,yourDate); –

回答

2

您可以使用replaceAll與以下正則表達式:

(?i)\\([a-z]{3} \\d{1,2}:\\d{2}[pa]m [a-z]{3}\\) 

Regex的擊穿:

  • (?i) - 使圖案不區分大小寫的
  • \\( - 字面開口輪托架
  • [a-z]{3} - 3字母
  • \\d{1,2}: - 的空間中,1或2位數字和一個:
  • \\d{2} - 2位數字
  • [pa]m - 閉合圓形支架 - PMAM
  • [a-z]{3}用3個字母
  • \\)的空間。

參見IDEONE demo

String str = "((Mon 3:23PM EDT) ((Thu, Sep 3) ((Thu, Sep 3) ((Wed, Sep 2) ((Tue, Sep 1) ((Mon, Aug 31) ((Fri, Aug 28) ((Wed, Aug 26) ((Wed, Aug 26) ((Fri, Aug 21) ((Mon, Aug 17) ((Thu, Aug 13) ((Thu, Aug 13)"; 
str = str.replaceAll("(?i)\\([a-z]{3} \\d{1,2}:\\d{2}[pa]m [a-z]{3}\\)", "(" + todaysDate + ")"); 
System.out.println(str); 

今天的輸出:((Mon, Sep 07) ((Thu, Sep 3) ((Thu, Sep 3) ((Wed, Sep 2) ((Tue, Sep 1) ((Mon, Aug 31) ((Fri, Aug 28) ((Wed, Aug 26) ((Wed, Aug 26) ((Fri, Aug 21) ((Mon, Aug 17) ((Thu, Aug 13) ((Thu, Aug 13)

+1

謝謝!效果很好 – j1nrg