我需要从表达式的数字部分中删除前导零(使用.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)
显然,它没有用。我需要一些帮助才能找到错误。
答案 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)删除字符串中的所有“前导”零。