说我有一个文本,表示为std :: string,其中包含几个不同的换行符,例如\ r \ n但也只是\ n甚至只是\ r。
我现在想通过用\ r \ n替换所有非\ r \ n换行符来统一这一点,即所有\ r和所有\ n换行符。
一个简单的boost :: replace_all(text," \ n"," \ r \ n");并不会不幸地工作,因为这也会取代已经有效的\ r \ n中的\ n。
我认为std :: regex应该是处理这个问题的好方法......但我应该如何在正则表达式中表达这一点?这是一些代码:
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string text = "a\rb\nc\r\nd\n";
std::regex reg(""); // What to put here?
text = std::regex_replace(text, reg, "\r\n");
std::cout << text;
}
最后的文字应该是"aaa\r\nbbb\r\nccc\r\nddd\r\n"
答案 0 :(得分:2)
交换&#34; \n
&#34;没有前面的&#34; \r
&#34;:
std::regex_replace(text, "([^\r])\n", "$1\r\n");
交换&#34; \r
&#34;没有关注&#34; \n
&#34;:
std::regex_replace(text, "\r([^\n])", "\r\n$1");
请注意,根据c ++ regexp风格,如果你正在考虑它,你很有可能不支持看看。
答案 1 :(得分:2)
你可以分两步完成:
\n
- &gt; \r\n
\r\r\n
- &gt; \r\n
或一步到位:
(?:\r\n|\n|\r)
- &gt; \r\n
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string text = "a\rb\nc\r\nd\n";
text = std::regex_replace(text, std::regex("(?:\\r\\n|\\n|\\r)"), "\r\n");
std::cout << text;
}
答案 2 :(得分:1)
\n
代表任何类型的换行符,即:\r
或\r\n
或{{1}}
答案 3 :(得分:1)