Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除除数字以外的所有零_C#_Regex - Fatal编程技术网

C# 删除除数字以外的所有零

C# 删除除数字以外的所有零,c#,regex,C#,Regex,我必须删除字符串中的所有零,但我必须保留数字中的零 我收到的字符串的格式类似于“零字母零数字”,没有“-”,数字总是整数。举几个例子: "0A055" -> "A55" "0A050" -> "A50" "0A500" -> "A500" "0A0505" -> "A505" "0055" -> "55" "0505" -> "505" "0050" -> "50" 我知道我可以通过字符串中的字符进行迭代,并在遇到与0不同的字母或数字时设置标志,但我认

我必须删除字符串中的所有零,但我必须保留数字中的零

我收到的字符串的格式类似于“零字母零数字”,没有“-”,数字总是整数。举几个例子:

"0A055" -> "A55"
"0A050" -> "A50"
"0A500" -> "A500"
"0A0505" -> "A505"
"0055" -> "55"
"0505" -> "505"
"0050" -> "50"
我知道我可以通过字符串中的字符进行迭代,并在遇到与0不同的字母或数字时设置标志,但我认为使用正则表达式会更好。如果我必须在数据库中使用这个算法,正则表达式也会更有帮助

我尝试过类似的方法,但没有得到想要的结果:

Regex r = new Regex(@"[0*([a-zA-Z]*)0*([1-9]*)]");
string result = r.Replace(input, "");

我不太擅长写正则表达式,所以如果可以,请帮助我。

因为您似乎只有一个字母,所以可以将该字母上的字符串分成两半

在左侧部分,修剪所有零


在右边部分,将其转换为一个数字,这将删除所有前导零,或者您可以使用TrimStart。

如果我正确理解您的模式


基本上,使用模式来否定所有不重要的0,并使用正则表达式替换分组来重新连接“有意义”的数字(以及出现时的字母)。

我不相信正则表达式是实现这一点的最佳方法,但这一方法适用于所有测试用例:

string clean = Regex.Replace(dirty, @"(?<!\d)0+|0+(?!\d|$)", "");
0+(?=[0-9].)|0(?=[a-zA-z])|(?<=[a-zA-Z])0+

string clean=Regex.Replace(dirty,@)(?用Regex进行替换要比提取所需的值困难得多。因此,请尝试使用下面的简单Regex匹配字符串

0*(?<letter>[A-Z])0*(?<number>\d*)
0*(?[A-Z])0*(?\d*)

然后,您的匹配结果将包含两个组,字母和数字。取这两个组的值并附加它们,您将得到您想要的结果。

下面是一个Perl答案,说明它的价值

s/0*([a-zA-Z]*)0*([1-9]+0*)/$1$2/g

我不知道regex是如何在.net中实现的,所以我会让您使用中的玩具编写适当的代码

无论采用哪种方式,此模式都应该有效(在伪代码中):

0*
表示零或多个0

+
表示除行尾以外的任何字符


$2
表示第二组括号(因此我们只是丢弃字符串的(
0*
)部分)。

与其他部分一样,我不确定正则表达式是否是最好的方法,但这适用于测试用例:

string clean = Regex.Replace(dirty, @"(?<!\d)0+|0+(?!\d|$)", "");
0+(?=[0-9].)|0(?=[a-zA-z])|(?<=[a-zA-Z])0+

0+(?=[0-9])| 0(?=[a-zA-z])|(?那么,你是说十进制数?小数点是数字的一部分吗?@Mentoliptus,是不是有1个或0个字母?也就是说,你看不到0ABC0123?另外,每个位置是否有一个以上的零?(只是澄清一下。)@Jodrell,我编辑并指定没有小数numbers@AAT,现在我只收到一个字母的字符串,但这可能会在未来发生变化。像Eh和Brad Christie的答案都有效,我能把这两个都标记为答案吗?谢谢你们这么快!现在有些情况下没有字母的好主意,但我不生成字符串和format可能会更改。我已经收到超过1个字母的字符串,但这些字符串现在没有零。我不喜欢正则表达式方法,但我认为我必须在SQL中传输此算法,因此我希望使用相同的正则表达式两次。我在nregex.com上测试了这一点,它也去掉了最后的零,所以0A500变为A5。这是一个错误吗lf?@Sam:也许,也许只是JavaScript和.NET实现之间的差异。
0+(?=[0-9].)|0(?=[a-zA-z])|(?<=[a-zA-Z])0+