【问题标题】:Replace double number to float number using regular expression使用正则表达式将双数替换为浮点数
【发布时间】:2014-04-09 05:09:29
【问题描述】:

我有一个带有常数的文本文件。 其中一些是像 0.0 这样的双精度类型,而另一些是像 0.0f 这样的浮点类型。 我想将所有数字更改为以 f 结尾的浮点格式。 但是我可以用正则表达式找到浮点数,但我无法区分浮点类型数。 因此,存在这样的问题: 1.0, 1.1, 1.1f, 1.2f, 2.0 -> 1.0f, 1.1f, 1.1ff, 1.2ff, 2.0f

我想像这样更改这些示例:1.0f、1.1f、1.1f、1.2f、2.0f

我查找浮点数的规则表达式是这样的: 模式:([-+]?)([0-9]+)(.{1})([0-9]+)([eE]?[+-]?[0-9]+)? 替换:$1$2$3$4f

有人能区分浮点数和双精度数吗?

提前致谢。

【问题讨论】:

  • 为什么?我会删除所有fs。容易得多。数据文件不应包含编程语法。

标签: c# c++ regex double


【解决方案1】:

使用负前瞻(参见syntax

例如:

((?:[-+]?)(?:[0-9]+)(?:.{1})(?:[0-9]+)(?:[eE]?[+-]?[0-9]+)?)(?!f)

你的替换模式是

$1f

请注意,我已将您的捕获组替换为 被动组,并为数字添加了一个组

编辑:替代方案(仅使用您的测试字符串进行测试...)

((?:[-+]?)(?:[0-9]+)(?:.{1})(?:[0-9]+)(?:[eE]?[+-]?[0-9]+)?)([^f]?,|$)

替换为

$1f$2

【讨论】:

  • 感谢您的回答。我以前试过 (?!f)。但它不适用于 Visual Studio 编辑器和 C# Regex.replace()。好奇怪……
  • 我应该问你使用的是什么风格的正则表达式。我假设是 c++11 中的那个
  • 我没有写c#标签。对此感到抱歉。目标代码是 c++ 代码,使用 C# Regex 完成转换。
  • @user2775054 我提供了一个没有负面预测的替代方案。从来没有用 C# 做过任何事情,但根据msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx 支持负前瞻(至少在那个版本中)......
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多