David Pullar
David Pullar

Reputation: 706

String Split AND Replace

I am trying to replace a string based on the split portion. This string is a date, where the year should be formatted as a superscript.

Eg. Jan 24, 2014 needs to be split at 2014 then replaced with Jan 24, ^2014^ where 2014 is the superscript.

Example pseudo:

mydate.Split(" ", 2).Replace("^2014^")

But, instead of replacing the new split string, it should be the original (or copy of original). I can't just edit based on index because the formatting may not always be the same, at times the date may be expanded to January 24th, 2014 which would then break the traditional replace by index.

Upvotes: 1

Views: 57

Answers (3)

rheitzman
rheitzman

Reputation: 2297

Normalize you date string by assigning it to a Date variable, then do the formatting from there.

    Dim dt As Date = "Jan 24, 2014"
    Dim s As String = dt.ToShortDateString.Replace("2014", "^2014^")
    MsgBox(s)
    ' or '
    s = dt.Month.ToString & "/" & dt.Day.ToString & "/^" & dt.Year.ToString & "^"
    MsgBox(s)

IMO RegEx is write once code and is difficult to debug/maintain.

Upvotes: 0

hwnd
hwnd

Reputation: 70742

You can use a combination of lookarounds to achieve your result.

Regex.Replace(input, "(?<=\d{4})|(?=\d{4})", "^")

Explanation:

(?<=        #  look behind to see if there is:
  \d{4}     #    digits (0-9) (4 times)
)           #  end of look-behind
|           # OR
(?=         #  look ahead to see if there is:
  \d{4}     #    digits (0-9) (4 times)
)           #  end of look-ahead

Live Demo

Upvotes: 1

Braj
Braj

Reputation: 46871

You can try

(?<=[A-Z][a-z]{2} \d{2}, )(\d{4})

Replaced with ^$1^ or ^\1^

Here is online demo and tested it on regexstorm


If you want to match January 24th, 2014 as well then try

([A-Z][a-z]{2,9} \d{2}[a-z]{0,2}, )(\d{4})

Replaced with $1^$2^

Here is demo

Upvotes: 1

Related Questions