我似乎无法弄清楚这一点。我知道可以使用正则表达式,但还没有任何创建它们的经验。我有一串日期,如下所示:
( (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());
最佳答案
您可以将 replaceAll
与以下正则表达式结合使用:
(?i)\\([a-z]{3} \\d{1,2}:\\d{2}[pa]m [a-z]{3}\\)
正则表达式分割:
(?i)
- 使模式不区分大小写\\(
- 文字左圆括号[a-z]{3}
- 3 个字母\\d{1,2}:
- 一个空格、1 或 2 位数字以及:
\\d{2}
- 2 位数字[pa]m
-PM
或AM
[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 ) ( (8月28日星期五) ( (8月26日星期三) ( (8月26日星期三) ( (8月21日星期五) ( (8月17日星期一) ( (8月13日星期四) ( (8月13日星期四)
关于java - 替换分隔符之间的字符串中的字符 - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445985/