我得到以下内容:
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)根本没有后视.