使用正则表达式拆分特殊字符
Using regex to split special char
string MyName = " 'hi, load1', 'hi, load2', varthatnotstring ";
我想使用regex在每个,
上拆分上述字符串,同时保留引号内的字符串。
因此,拆分MyName
应该得到:
1: 'hi, load1'
2: 'hi, load2'
3: varthatnotstring
我目前使用regex MyR("(.),(.),(.*)");
,但这给了我:
1: 'hi
2: load1'
3: 'hi
4: load2'
- 我应该使用什么正则表达式?
根据您希望如何处理某些极端情况,您可以使用以下命令:
std::regex reg(R"--((('.*?')|[^,])+)--");
Step, by Step:
-
R"--(...)--"
是原始字符串字面量的语法,所以我们不必担心转义。这里我们不需要它,但我在默认情况下为正则字符串使用它们。 -
('.*?')
两个撇号之间(包括)的所有字符(非贪婪) -
[^,]
非逗号 -
(('.*?')|[^,])+
非,
字符或'...'
序列的任意序列。
(注意:('.*?')
部分必须先出现)
所以这也将匹配例如tkasd 'rtzrze,123'
作为单个匹配。它也不会删除任何空格。
用法:
std::regex reg(R"--((('.*?')|[^,])+)--");
std::string s = ",,t '123,4565',k ,'rt',t,z";
for (std::sregex_iterator rit(s.begin(), s.end(), reg), end{}; rit != end; ++rit) {
std::cout << rit->str() << std::endl;
}
输出:t '123,4565'
k
'rt'
t
z
编辑:
我很少使用正则表达式,所以欢迎任何关于可能的改进或陷阱的评论。也许还有一个更好的解决方案,使用regex_token_iterator
。
相关文章:
- 如何用转义符替换字符串中的所有特殊字符
- 转换特殊字符(UTF-8)
- 如何根据字符拆分字符串
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何在C++中打印此"█"特殊字符?
- c++为什么ifstream get()函数返回无法识别的特殊字符
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 转义std::字符串中的特殊字符
- SDL2加载具有特殊字符的文件
- 将 std::string 转换为具有特殊字符的 FString (TCHAR / wstring)
- 如何从文本文件C++读取整数和特殊字符
- USB序列号显示特殊字符
- 键入特殊字符并保存在文件中
- 回文,不包括特殊字符和空格
- 将字符拆分为字符数组
- 无法使用 Unicode 特殊字符设置窗口文本
- 使用 libmysql 插入特殊字符
- 使用具有特殊字符的正则表达式标记 C++ 字符串
- 如何输入以特殊字符开头的字符串
- 使用正则表达式拆分特殊字符