【发布时间】:2018-07-07 17:19:24
【问题描述】:
所以我正在处理一份报告,该报告(非常棒,真的)在 .csv 输出中吐出带有逗号的数值。超级好用。
所以,我使用 (C#) 正则表达式前瞻正向和后向正向表达式来删除两边都有数字的逗号。
如果我只使用前瞻,它似乎工作。但是,当我也添加后视功能时,表达式会分解并且不会删除任何内容。逗号的两端可以有任意数量的数字,所以如果模式周围有一个或多个数字,我只想删除逗号。
这是仅适用于前瞻的表达式:
str = Regex.Replace(str, @"[,](?=(\d+)),"");
这里的表达方式不符合我的预期:
str = Regex.Replace(str, @"[,](?=(\d+)?<=(\d+))", "");
我的正则表达式有什么问题!如果我不得不猜测,那么我对lookbehind的工作方式有一些误解。有什么想法吗?
【问题讨论】:
-
我不知道,但我建议
Regex.Replace(str, @"(\d),(\d)", "$1$2") -
你怎么知道
1,2,3,4是1, 2, 3, 4或1.2, 3.4或1, 2.3, 4或其他组合? -
我同意安德烈亚斯的观点。这种模棱两可意味着你需要解决最初的问题。创建 CSV 文件的东西实际上并没有创建有效的 CSV 文件,因为它应该引用包含逗号的值。如果你不能解决这个问题,也许你可以通过在使用点作为小数点的语言环境中运行它来欺骗它。
-
您可以尝试
Regex.Replace(s, @"(?<=\d),(?=\d)", string.Empty),但似乎原来的方法可能需要重新考虑。 -
如果你能展示一个示例输入和所需的输出会有所帮助