我有像这样的标准字符串:
用户名:留言
乍一看,这似乎是一个简单的问题,但这个问题在于名称的最后一个字符可能是“:”,而字符串中消息部分的第一个字母也可能是“:”。用户的名字中也可以有空格。
所以一个用户可能是名字'一些名字:'并且可能输入一条消息':你好'
看起来像:'一些名字:::你好'
我确实有用户名列表(向量)。
鉴于此,有没有办法从这种字符串中提取用户名?(理想情况下无需遍历用户列表)
谢谢
尝试像(\w+?):\ \w+
. _
如果您不能保证用户名不包含“:”字符,并且您希望避免每次检查时都迭代整个列表,您可以尝试使用快捷方式。
只保留包含特殊字符的用户名的向量(我想这是所有用户名的一小部分)。首先检查这些,如果找到匹配项,请获取 [username]: 之后的字符串。否则,您可以简单地对冒号进行简单的拆分。
我会使用字符串标记
string text = "token, test string";
char_separator<char> sep(":");
tokenizer< char_separator<char> > tokens(text, sep);
BOOST_FOREACH(string t, tokens)
{
cout << t << "." << endl;
}
我解决这个问题的方法是简单地找到第一个冒号。在那里拆分字符串,然后修剪剩余的两个字符串。
我并不完全清楚为什么会有额外的冒号以及它们是否是值的一部分。如果需要删除它们,那么您还需要将它们剥离。