1

我有像这样的标准字符串:

用户名:留言

乍一看,这似乎是一个简单的问题,但这个问题在于名称的最后一个字符可能是“:”,而字符串中消息部分的第一个字母也可能是“:”。用户的名字中也可以有空格。

所以一个用户可能是名字'一些名字:'并且可能输入一条消息':你好'

看起来像:'一些名字:::你好'

我确实有用户名列表(向量)。

鉴于此,有没有办法从这种字符串中提取用户名?(理想情况下无需遍历用户列表)

谢谢

4

4 回答 4

1

尝试(\w+?):\ \w+. _

于 2012-04-18T19:56:36.337 回答
1

如果您不能保证用户名不包含“:”字符,并且您希望避免每次检查时都迭代整个列表,您可以尝试使用快捷方式。

只保留包含特殊字符的用户名的向量(我想这是所有用户名的一小部分)。首先检查这些,如果找到匹配项,请获取 [username]: 之后的字符串。否则,您可以简单地对冒号进行简单的拆分。

于 2012-04-18T19:58:34.780 回答
0

我会使用字符串标记

string text = "token, test   string";

char_separator<char> sep(":");
tokenizer< char_separator<char> > tokens(text, sep);
BOOST_FOREACH(string t, tokens)
{
    cout << t << "." << endl;
}
于 2012-04-18T19:58:40.373 回答
0

我解决这个问题的方法是简单地找到第一个冒号。在那里拆分字符串,然后修剪剩余的两个字符串。

我并不完全清楚为什么会有额外的冒号以及它们是否是值的一部分。如果需要删除它们,那么您还需要将它们剥离。

于 2012-04-18T19:59:43.937 回答