java - 替换分隔符之间的字符串中的字符 - 正则表达式

标签 java regex string

我似乎无法弄清楚这一点。我知道可以使用正则表达式,但还没有任何创建它们的经验。我有一串日期,如下所示:

( (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 - 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 ) ( (8月28日星期五) ( (8月26日星期三) ( (8月26日星期三) ( (8月21日星期五) ( (8月17日星期一) ( (8月13日星期四) ( (8月13日星期四)

关于java - 替换分隔符之间的字符串中的字符 - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32445985/

相关文章:

c - 在 C 中打印字符串数组的元素

Python - 打印错误消息指向的行

java - 为什么 BFS 在这种情况下不保证最小成本路径?

regex - Python re.match 不匹配以 ".number"结尾的字符串

.net - 正则表达式匹配除两个单词之外的任何内容

python - 在 Django View 中省略一个参数?

c++ - 如何使用 operator new 创建动态二维字符数组?

java - 在 Java 中获取计算机名称

java - 从类中调用 Activity 中的函数

java - @DecimalMax.List 用法示例?