0

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

一个例子是“0.1.20”应该变成“0.1 .20” - 当你有2个小数点仅由一个或多个小数分隔时,基本上在第二个小数点之前添加一个空格(即“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, "$1 $2");$

  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 日志记录行上保持不变。我正在使用类似的正则表达式来清理字符串的其他元素并且它们都可以正常工作,所以我假设它与正则表达式本身直接相关。

4

1 回答 1

1

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

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

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

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

于 2019-10-19T20:42:18.970 回答