使用正则表达式删除前导/尾随空格,引号除外
Using Regex to remove leading/trailing whitespaces, except for quotes
我正在尝试编写一个正则表达式,该表达式从用户输入字符串中识别空格,引号("
..."
)。例如,如果用户输入
#load "my folder/my files/ program.prog" ;
我希望我的正则表达式替换将其转换为
#load "my folder/my files/ program.prog" ;
到目前为止,我已经实现了以下内容(您可以在此处运行它)。
#include <iostream>
#include <string>
#include <regex>
int main(){
// Variables for user input
std::string input_line;
std::string program;
// User prompt
std::cout << ">>> ";
std::getline(std::cin, input_line);
// Remove leading/trailing whitespaces
input_line = std::regex_replace(input_line, std::regex("^ +| +$|( ) +"), "$1");
// Check result
std::cout << input_line << std::endl;
return 0;
}
但这也会删除引号之间的空格。有什么方法可以使用正则表达式忽略引号之间的空格吗?
您可以添加另一种替代方法来匹配和捕获双引号字符串文字,并使用另一个反向引用将其重新插入到结果中:
input_line = std::regex_replace(
input_line,
std::regex(R"(^ +| +$|("[^"\]*(?:\[sS][^"\]*)*")|( ) +)"),
"$1$2");
请参阅C++演示。
"[^"\]*(?:\[sS][^"\]*)*"
部分匹配一个"
,然后是 0+ 字符,而不是和
"
字符,然后是 0 次或多次出现任何转义字符(,然后是任何与
[sS]
匹配的字符),然后是 0+ 个字符,而不是和
"
个字符。
注意我使用了原始字符串文字R"(...)"
以避免转义正则表达式转义反斜杠 (R"([sS])"
="[\s\S]"
)。
相关文章:
- 使用正则表达式regex_search在字符串中查找字符串
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++正则表达式无限循环
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 带有多个字符分隔符的正则表达式
- C++ 使用增强正则表达式库时断言崩溃
- 有人可以帮助我处理正则表达式吗?
- 使用正则表达式获取大括号块的列表
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 组合正则表达式部分使用 | 不起作用的 C++
- 为什么C++正则表达式这么慢?
- 如何使HTML5电子邮件验证正则表达式在C++中工作?
- C++ 正则表达式不匹配空格
- 使用正则表达式C++计算数字中的十进制空格
- 使用正则表达式删除前导/尾随空格,引号除外
- Qt - 在没有正则表达式的情况下,将 QString 拆分为几种类型的空格
- 提升正则表达式与空格不匹配"\s"
- 匹配以空格分隔的多个坐标的正则表达式
- 需要一个正则表达式来从字符串中提取字母和空格