正则表达式 - 删除表达式中的零

时间:2012-10-15 18:06:06

标签: c# .net regex

我需要从表达式的数字部分中删除前导零(使用.net 2.0 C#Regex类)。

例如:

  

PAR0000034 - > PAR34

     

WP0003204 - > WP3204

我尝试了以下内容:

//keep starting characters, get rid of leading zeroes, keep remaining digits
string result = Regex.Replace(inputStr, "^(.+)(0+)(/d*)", "$1$3", RegexOptions.IgnoreCase)

显然,它没有用。我需要一些帮助才能找到错误。

4 个答案:

答案 0 :(得分:3)

在你的表达式中,.*部分是贪婪的,因此它会捕获完整的字符串。进一步 对数字\d

使用反斜杠而不是斜杠
string result = Regex.Replace(inputStr, @"^([^0]+)(0+)(\d*)", "$1$3");

或者使用后面的代替:

string result = Regex.Replace(inputStr, "(?<=[a-zA-Z])0+", "");

答案 1 :(得分:3)

您不需要正则表达式,Split方法可以为您做到这一点。

'0'上拆分,删除空条目(即在多个零之间),并将结果限制为两个字符串,将在前导零之前和之后提供两个字符串。然后你再把这两个字符串放在一起:

string result = String.Concat(
  input.Split(new char[] { '0' }, 2, StringSplitOptions.RemoveEmptyEntries)
);

答案 2 :(得分:0)

这对我有用:

Regex.Replace("PPP00001001", "([^0]*)0+(.*)", "$1$2");

答案 3 :(得分:0)

短语“前导零”令人困惑,因为你所说的零实际上并不在字符串的开头。但如果我理解正确,你想要这个:

string result = Regex.Replace(inputStr, "^(.*?)0+", "$1");

实际上有几种方法可以使用和不使用正则表达式,但上述内容可能是最短且最容易理解的。重要的部分是.*?懒惰量词。这将确保它a)只找到第一个零的字符串,并且b)删除字符串中的所有“前导”零。