Question

I'm trying to write a regex pattern that will find numbers with two leading 00's in it in a string and replace it with a single 0. The problem is that I want to ignore numbers in parentheses and I can't figure out how to do this.

For example, with the string:

Somewhere 001 (2009)

I want to return:

Somewhere 01 (2009)

I can search by using [00] to find the first 00, and replace with 0 but the problem is that (2009) becomes (209) which I don't want. I thought of just doing a replace on (209) with (2009) but the strings I'm trying to fix could have a valid (209) in it already.

Any help would be appreciated!

Was it helpful?

Solution

Search one non digit (or start of line) followed by two zeros followed by one or more digits.

([^0-9]|^)00[0-9]+

What if the number has three leading zeros? How many zeros do you want it to have after the replacement? If you want to catch all leading zeros and replace them with just one:

([^0-9]|^)00+[0-9]+

OTHER TIPS

Ideally, you'd use negative look behind, but your regex engine may not support it. Here is what I would do in JavaScript:

string.replace(/(^|[^(\d])00+/g,"$10");

That will replace any string of zeros that is not preceded by parenthesis or another digit. Change the character class to [^(\d.] if you're also working with decimal numbers.

?Regex.Replace("Somewhere 001 (2009)", " 00([0-9]+) ", " 0$1 ")
"Somewhere 01 (2009)"
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top