我有一个像这样的字符串
"<firstname>Anna</firstname>"或
"<firstname>Anna Lena</firstname>"并且我想使用正则表达式从其中获取名称(因此只有"Anna“或"Anna Lena")。目前我使用的是:
std::regex reg1 ("(<firstname>)([a-zA-Z0-9]*)(</firstname>)");和
std::regex_replace (std::back_inserter(result), input.begin(), input.end(), reg1, "$2");它只使用一个名字就可以工作得很好,但显然它遗漏了后面的任何东西,因为它不考虑空白。现在我尝试添加像((([a-zA-Z0-9]*)|\s)*)一样的\s,但是我的集成开发环境(Qt)告诉我,\s是一个未知的转义序列。现在,"<firstname>Anna Lena</firstname>"的结果是"<firstname>Anna"。
我如何以优雅的方式解决这个问题?
发布于 2016-06-20 17:36:54
在我看来,您在插入的regex_replace中的back_converter有问题。
我建议将\s添加到character类并匹配字符串,而不是重新分配向量字符串。
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::vector<std::string> strings;
strings.push_back("<firstname>Anna</firstname>");
strings.push_back("<firstname>Anna Lena</firstname>");
std::regex reg("(<firstname>)([a-zA-Z0-9\\s]*)(</firstname>)");
for (size_t k = 0; k < strings.size(); k++)
{
smatch s;
if (std::regex_match(strings[k], s, reg)) {
strings[k] = s[2];
std::cout << strings[k] << std::endl;
}
}
return 0;
}输出:
Anna
Anna Lenahttps://stackoverflow.com/questions/37908218
复制相似问题