1

I can't seem to figure this one out. I know that a regular expression can be used, but haven't really had any experience with creating them. I have a string of dates that looks like this:

( (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)

When there is a time stamp in the string, such as the 3:23 above, I need to replace that with the today's date. I am getting today's date in the format I need by using the following:

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

Essentially the string should be

 ( (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)

So far I have tried to use something along the lines of this, but all it is doing is removing the first piece of the string between the parenthesis:

String origStr = links.text().substring(0, links.text().indexOf("("))+
            links.text().substring(links.text().indexOf(")")+"))".length());
1
  • 1
    something like replaceAll("\d+:\d+[AP]M", yourDate); Commented Sep 7, 2015 at 21:05

1 Answer 1

2

You can use a replaceAll with the following regex:

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

Regex breakdown:

  • (?i) - Make the pattern case-insensitive
  • \\( - a literal opening round bracket
  • [a-z]{3} - 3 letters
  • \\d{1,2}: - a space, 1 or 2 digits, and a :
  • \\d{2} - 2 digits
  • [pa]m - PM or AM
  • [a-z]{3} a space with 3 letters
  • \\) - a closing round bracket.

See 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);

Today's output: ( (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)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.