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