.Net删除字符串中的所有前0位

Mel*_*sus 7 c# regex .net-3.5

我得到以下内容:

03年5月1日

我需要将其转换为1.5.3

问题是我不仅可以修剪0,因为如果我得到:

10年5月1日

我需要将其转换为1.5.10

那么,解决这个问题的更好方法是什么?正则表达式?如果是这样,任何正则表达式的例子呢?

dtb*_*dtb 16

扩展@FrustratedWithFormsDesigner的答案:

string Strip0s(string s)
{
    return string.Join<int>(".", from x in s.Split('.') select int.Parse(x));
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*lak 15

正则表达式替换

(?<=^|\.)0+
Run Code Online (Sandbox Code Playgroud)

用空字符串.正则表达式是:

(?<=     # begin positive look-behind (i.e. "a position preceded by")
  ^|\.   #   the start of the string or a literal dot †
)        # end positive look-behind
0+       # one or more "0" characters

†请注意,并非所有正则表达式都支持可变长度的后视,但.NET确实如此.

如果你期望这种输入:"00.03.03"并且想要在这种情况下保持前导零(比如"0.3.3"),请使用此表达式:

(?<=^|\.)0+(?=\d)
Run Code Online (Sandbox Code Playgroud)

并再次用空字符串替换.


从评论(感谢Kobi):有一个更简洁的表达式,不需要后视,相当于我的第二个建议:

\b0+(?=\d)
Run Code Online (Sandbox Code Playgroud)

是的

\b       # a word boundary (a position between a word char and a non-word char) 
0+       # one or more "0" characters
(?=\d)   # positive look-ahead: a position that's followed by a digit

这是有效的,因为0恰好是一个单词字符,因此可以使用单词边界来查找0连续的第一个字符.它是一个更兼容的表达式,因为许多正则表达式都不支持可变长度的后视,而有些(如JavaScript)根本没有后视.

  • @Melursus:不,因为这很容易*找到.官方文档和不计数的网站(包括Stack Overflow本身)可以为您提供如何在.NET中使用正则表达式的示例. (4认同)