我试图替换正则表达式中的所有字符期望数字,但数字不应该以0开头 如何使用正则表达式实现此目的?
我尝试了多项内容,例如@"^([1-9]+)(0+)(\d*)"
和"(?<=[1-9])0+"
,但这些内容无效
该文字的一些示例可以是hej:\\\\0.0.0.22
,hej:22
,hej:\\\\?022
和hej:\\\\?22
,结果应该在所有地方22
答案 0 :(得分:1)
而不是替换,尝试匹配字符串上的[1-9][0-9]*$
。抓取匹配的文字。
请注意,如果使用\d
,因为.NET正则表达式匹配Unicode数字字符,这里正则表达式会限制与简单字符类匹配的内容。
(注意:正则表达式假定仅在行尾的匹配)
答案 1 :(得分:1)
根据您的一条评论hej:\\\\0.011.0.022
应该产生110022
。首先从第一个非零数字到最后一个不为零的数字选择相关的字符串部分:
([1-9].*[1-9]\d*)|[1-9]
[1-9]
是第一个非零数字
.*
是任意数量的任何字符
[1-9]\d*
是数字,从第一个非零数字开始
|[1-9]
包括仅包含一个非零数字的案例
然后删除所有非数字(\D
)
Match match = Regex.Match(input, @"([1-9].*[1-9]\d*)|[1-9]");
if (match.Success) {
result = Regex.Replace(match.Value, "\D", "");
} else {
result = "";
}
答案 2 :(得分:0)
使用以下
[1-9][0-9]*$
您不需要进行任何递归,只需匹配即可。
答案 3 :(得分:0)
您可以尝试使用The87Boy,您可以随意使用或添加模式。
string strTargetString = @"hej:\\\\*?0222\";
string pattern = "[\\\\hej:0.?*]";
string replacement = " ";
Regex regEx = new Regex(pattern);
string newRegStr = Regex.Replace(regEx.Replace(strTargetString, replacement), @"\s+", " ");
Result from the about Example = 22