C++ 使用正则表达式删除前导/尾随空格(引号除外)

C++ 使用正则表达式删除前导/尾随空格(引号除外),c++,regex,c++11,C++,Regex,C++11,我正在尝试编写一个正则表达式,它可以识别用户输入字符串中的空格,引号之间除外(“…”)。例如,如果用户输入 #load "my folder/my files/ program.prog" ; 我希望我的正则表达式替换将其转换为 #load "my folder/my files/ program.prog" ; 到目前为止,我已经实现了以下内容(您可以运行它) #包括 #包括 #包括 int main(){ //用于用户输入的变量 std:

我正在尝试编写一个正则表达式,它可以识别用户输入字符串中的空格,引号之间除外(
)。例如,如果用户输入

     #load     "my   folder/my  files/    program.prog"     ;
我希望我的正则表达式替换将其转换为

#load "my   folder/my  files/    program.prog" ;
到目前为止,我已经实现了以下内容(您可以运行它)

#包括
#包括
#包括
int main(){
//用于用户输入的变量
std::字符串输入线;
字符串程序;
//用户提示

std::cout您可以添加另一个选项来匹配和捕获双引号字符串文本,并使用另一个反向引用将其重新插入结果:

input_line = std::regex_replace(
      input_line, 
      std::regex(R"(^ +| +$|(\"[^\"\\]*(?:\\[\s\S][^\"\\]*)*\")|( ) +)"),
      "$1$2");

“[^”\\]*(?:\[\s][^”\\]*)*“
部分匹配一个
,然后是0个以上字符,而不是
\
,然后是0个或多个转义字符(
\
和与
[\s\s]
匹配的任何字符),然后是0个以上字符,而不是


注意:我使用了原始字符串文字
R“(…)”
来避免转义正则表达式转义反斜杠(
R“([\s\s])”
=
“[\\s\\s]”
).

您的问题非常清楚,但是代码似乎没有太多共同之处。请将您的问题分解为几个小问题,并提供一个代码来演示它们。关于正则表达式有一种说法,它是这样的:“我有一个问题。我用正则表达式解决了它。现在我有两个问题“。正则表达式可以非常强大,但在许多情况下,它完全是多余的,更不用说它们也非常复杂。修剪空格是一种情况,其他更简单的解决方案可能就足够了。在您的情况下,一个简单的复制循环,带有一个布尔标记“inside string”,应该足够了。听起来你在找修剪…@WiktorStribiżew Done