我正在为使用c ++进行的项目构建一个简单的数据编码器/解码器,数据以这种格式(虚拟数据)写入文件:
{X143Y453CGRjGeBK}{X243Y6789CaRyGwBk}{X5743Y12CvRYGQBs}
块的数量是不确定的,块的大小是可变的。
要解码图像,我需要遍历每个花括号块并处理其中的数据,理想的输出应如下所示:
"X143Y453CGRjGeBK" "X243Y6789CaRyGwBk" "X5743Y12CvRYGQBs"
我最近的是:
"\\{(.*)\\}"
但这给了我整个序列,而不是每个块。
很抱歉,如果这是一个简单的问题,但是正则表达式尚未真正引起我的注意,正则表达式是否有可能,还是我应该使用其他方法?
答案 0 :(得分:1)
您可以使用[^{}]+
:
[^{}]
:匹配下面列表中不存在的单个字符(在本例中为'{' & '}'
)\+
:匹配该字符后,请匹配一次且不限次数。答案 1 :(得分:1)
要提取在花括号内多次出现的子字符串,而花括号内没有括号(即,最里面的括号内的子字符串),则可以使用
#include <iostream>
#include <string>
#include <vector>
#include <regex>
int main() {
std::regex rx(R"(\{([^{}]*)})");
std::string s = "Text here {X143Y453CGRjGeBK} and here {X243Y6789CaRyGwBk}{X5743Y12CvRYGQBs} and more here.";
std::vector<std::string> results(std::sregex_token_iterator(s.begin(), s.end(), rx, 1),
std::sregex_token_iterator());
for( auto & p : results ) std::cout << p << std::endl;
return 0;
}
查看C++ demo。
std::regex rx(R"(\{([^{}]*)})")
正则表达式字符串为\{([^{}]*)}
,并且与之匹配
\{
-一个{
字符([^{}]*)
-捕获组1:除{
和}
以外的零个或多个字符}
-一个}
字符。传递给1
的{{1}}参数仅提取捕获到组1中的硫磺值。