我可能有以下输入:
<Object::1 <1,2><3,4><3,3>>
<Object::2 <1,2><3,4>>
<Object::3 <1,2> 5>
我需要两个在::(可能是一个字符串)之后提取值,然后在&lt;&gt;之后提取i个值。
所以对于第一个例子,我想得到:
1&lt; 1,2&gt; &LT; 3,4 GT; &LT; 3,3 GT;
我可以从字符串中读取,我只是不确定如何从中得到我想要的东西?
答案 0 :(得分:0)
我认为这对您有用(?<=::)([^<]+)\s+.*?(<.*)>
Demo
答案 1 :(得分:0)
嗯,让我们先把输入行读成一个字符串。
std::string text_from_file;
getline(my_text_file, text_from_file);
你想“跳过”文字“
这涉及使用find
的{{1}}方法。
std::string
接下来,测试位置。毕竟,如果找不到密钥字符串,我们不想继续。
std::string::size_type position_in_string;
position_in_string = text_from_file.find("<Object::");
下一个棘手的部分是获取“::”之后的数字
这可以通过多种方式完成,我们会尝试if (position_in_string != std::string::npos)
{
。
我们需要在“::”之后从字符串中获取文本,该文章称为 substring ,缩写为std::istringstream
。
substr
我们可以在文本字符串上使用流提取运算符:
unsigned int quantity = 0;
std::istringstream string_input(text_from_file.substr(position_in_string));
从输入文本中获取剩余文本称为解析。与上面的操作非常相似。你试一试。
StackOverflow中有很多帖子非常有用。通过搜索“[C ++]解析从文件读取”找到它们。