【发布时间】:2012-07-15 13:34:38
【问题描述】:
我正在尝试用不同的替换模式替换字符串中的某些模式。
例子:
string test = "test replacing \"these characters\"";
我想要做的是将所有 ' ' 替换为 '_' 并将所有其他非字母或数字字符替换为空字符串。我创建了以下正则表达式,它似乎可以正确标记,但我不确定如何(如果可能)使用regex_replace 执行条件替换。
string test = "test replacing \"these characters\"";
regex reg("(\\s+)|(\\W+)");
替换后的预期结果是:
string result = "test_replacing_these_characters";
编辑: 我不能使用 boost,这就是为什么我把它排除在标签之外。所以请不要回答包括提升。我必须用标准库来做这件事。可能是不同的正则表达式可以实现目标,或者我只是被困在做两次传球。
编辑2:
在我最初的正则表达式时,我不记得\w 中包含哪些字符,在查找之后我进一步简化了表达式。再次,目标是任何匹配 \s+ 的东西都应该替换为 '_' 并且任何匹配 \W+ 的东西都应该替换为空字符串。
【问题讨论】:
-
为什么在示例输出中删除了最后一个
"-char? -
@rubberboots - 因为只有空格应该替换为下划线,任何其他非字母和数字字符都应该替换为空。
-
我明白了,所以您会希望一次使用不同的替换文本。这在 c++ 正则表达式中不起作用。如果有人现在对此有窍门,我也想使用它;-)
-
@rubberboots - 是的,这就是我提出问题的原因,我想我最终会发现 - “你不能那样做”,但我想我可以问并希望有人聪明会有解决办法的。
-
我发现了一个带有回调函数的方法,不幸的是,它实际上在我的 C++11 实现(g++ 4.6.1,VS2012)中不起作用(但在 boost 中起作用)。
标签: c++ regex visual-studio-2010 visual-c++ c++11