如何使用正则表达式查找数字并在括号中排除任何数字

时间:2009-12-30 17:11:39

标签: regex regex-negation

我正在尝试编写一个正则表达式模式,它会在字符串中找到带有两个前导00的数字,并将其替换为单个0.问题是我想忽略括号中的数字而我无法计算如何做到这一点。

例如,使用字符串:

Somewhere 001 (2009)

我想回来:

Somewhere 01 (2009)

我可以使用[00]搜索找到第一个00,然后用0替换,但问题是(2009)变为(209)我不想要。我想过用(2009)替换(209),但是我想要修复的字符串已经有了一个有效的(209)。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

搜索一个非数字(或行的开头),然后是两个零,后跟一个或多个数字。

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

如果数字有三个前导零怎么办?更换后你想要它有多少个零?如果你想捕获所有前导零并用一个替换它们:

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

答案 1 :(得分:1)

理想情况下,你会使用负面看,但你的正则表达式引擎可能不支持它。以下是我在JavaScript中的操作:

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

这将替换任何前缀为括号或其他数字的零字符串。如果您还使用十进制数字,请将字符类更改为[^(\d.]

答案 2 :(得分:0)

?Regex.Replace("Somewhere 001 (2009)", " 00([0-9]+) ", " 0$1 ")
"Somewhere 01 (2009)"