【发布时间】:2016-05-01 08:32:09
【问题描述】:
我有以下字符串作为输入:
"2.0,3.00,-4.0,0.00,-0.00,0.03,2.01,0.001,-0.03,101"
最终输出会是这样的:
"2,3,-4,0,0,.03,2.01,.001,-.03,101"
即所有前导零和尾随零都将被删除,正/负零都将简单地为零。
我们可以通过首先拆分字符串并为每个部分使用正则表达式来实现这一点。但是我的字符串大小超过 10000。
我们如何使用Regex 来实现这一点?
编辑:
答案分析:
我已经用字符串 "0.00,-0.00,00.00,-00.00,40.00,-40.00,4.0,-4.0,4.01,-4.01,04.01,-04.01,004.04,-004.04,0004.040,-0004.040,101,.40,-.40,0.40,-0.40" 测试了所有答案,并且来自 Wiktor Stribiżew 的答案通过了所有测试用例。(请参见此处:https://regex101.com/r/tS8hE3/9)其他答案已通过在大多数情况下,但不是全部。
【问题讨论】:
-
我只拆分了字符串...然后分别对每个部分使用正则表达式。但这对于大字符串来说效率不高。我怎样才能在不拆分的情况下实现这一目标?
-
如果它适合你,你试试这个解决方案怎么样stackoverflow.com/questions/5965767/…
-
逐个处理字符并将它们收集到
StringBuilder将比正则表达式执行得更快,更节省空间 -
修复后得到你的输出regex101.com/r/rQ2rG5/1。只是好奇,既然你给了 stribnetz 所有的金子,有没有理由相信你的输入都是有效的数字?您可以解析文本以将其转换为数字。如果它无效,它将引发异常。否则,这是徒劳的练习,即。 如果不是数字,为什么要从数字中删除零?如果您不这样做,则必须在解析时进行验证,这就是我所做的。以这个为例,看看会发生什么regex101.com/r/aH6gX0/1