0

我正在尝试替换正则表达式中的所有字符,期望数字,但数字不应以 0 开头
如何使用正则表达式实现这一点?

我尝试了多种方法,例如@"^([1-9]+)(0+)(\d*)"and "(?<=[1-9])0+",但这些都不起作用

文本的一些示例可能是hej:\\\\0.0.0.22、和hej:22,并且所有地方的结果都应该是hej:\\\\?022hej:\\\\?2222

4

4 回答 4

1

与其替换,不如尝试匹配[1-9][0-9]*$您的字符串。抓取匹配的文本。

请注意,如果您使用 .NET 正则表达式匹配 Unicode 数字字符\d,这里正则表达式将匹配的内容限制为简单字符类。

(注意:正则表达式仅假定在行尾匹配)

于 2012-12-30T19:00:12.143 回答
1

根据您的评论之一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 = "";
}
于 2012-12-30T20:20:45.040 回答
0

使用以下

[1-9][0-9]*$

您不需要进行任何递归,只需匹配即可。

于 2012-12-30T19:08:32.447 回答
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

于 2012-12-30T19:16:33.020 回答