C++ regex_replace 清理连接的十进制数

C++ regex_replace to clean concatenated decimal numbers

作为清理用于显示的 SVG 路径数据字符串的一部分,我想在连接的小数之间添加 spaces。

一个例子是“0.1.20”应该变成“0.1 .20” - 当您有 2 个小数点仅由一个或多个小数分隔时,基本上在第二个小数点前添加一个 space(即“2.0”不应该变成“2 .0”)

我尝试了以下方法:

#include <iostream>
#include <regex>
#include <string>

void splitString(std::string& pathString) {

  // ... some other clean-up, which works ...

  std::regex re3("(\.[:digit:]+)(\.)");$
  pathString = std::regex_replace(pathString, re3, " ");$

  std::cout << pathString << std::endl;$
}

但是当我传入一个带有连接小数的字符串时,比如

M 46 -38.9 q 3.7.15 7.65.45 1.2.1 2.35.25 2.75.3 5.05.85 3.85.9 6.5 2.4

它在 cout 日志行上没有变化。我正在使用类似的正则表达式来清理字符串的其他元素,它们都可以正常工作,所以我假设它与正则表达式本身直接相关。

尝试了更多的东西,找到了一个有效的东西。

在 [:digit:] 周围添加一个字符 class 解决了问题。

std::regex re3("(\.[[:digit:]]+)(\.)");

[:digit:] 显然是一个 class 范围,它必须包含在一个字符 class 中才能被解析为一个原子。