我正在尝试替换正则表达式中的所有字符,期望数字,但数字不应以 0 开头
如何使用正则表达式实现这一点?
我尝试了多种方法,例如@"^([1-9]+)(0+)(\d*)"
and "(?<=[1-9])0+"
,但这些都不起作用
文本的一些示例可能是hej:\\\\0.0.0.22
、和hej:22
,并且所有地方的结果都应该是hej:\\\\?022
hej:\\\\?22
22
与其替换,不如尝试匹配[1-9][0-9]*$
您的字符串。抓取匹配的文本。
请注意,如果您使用 .NET 正则表达式匹配 Unicode 数字字符\d
,这里正则表达式将匹配的内容限制为简单字符类。
(注意:正则表达式仅假定在行尾匹配)
根据您的评论之一hej:\\\\0.011.0.022
应该 yield 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 = "";
}
使用以下
[1-9][0-9]*$
您不需要进行任何递归,只需匹配即可。
这是您可以尝试的东西 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