从C ++中的字符串中优雅地提取数据?

时间:2013-12-09 20:59:40

标签: c++ regex

我可能有以下输入:

  <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;

我可以从字符串中读取,我只是不确定如何从中得到我想要的东西?

2 个答案:

答案 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 ++]解析从文件读取”找到它们。