首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找包含空格的C++正则表达式(可选

查找包含空格的C++正则表达式(可选
EN

Stack Overflow用户
提问于 2016-06-19 22:21:02
回答 2查看 101关注 0票数 2

我有一个像这样的字符串

代码语言:javascript
运行
复制
"<firstname>Anna</firstname>"

代码语言:javascript
运行
复制
"<firstname>Anna Lena</firstname>"

并且我想使用正则表达式从其中获取名称(因此只有"Anna“或"Anna Lena")。目前我使用的是:

代码语言:javascript
运行
复制
std::regex reg1 ("(<firstname>)([a-zA-Z0-9]*)(</firstname>)");

代码语言:javascript
运行
复制
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"

我如何以优雅的方式解决这个问题?

EN

Stack Overflow用户

发布于 2016-06-20 17:36:54

在我看来,您在插入的regex_replace中的back_converter有问题。

我建议将\s添加到character类并匹配字符串,而不是重新分配向量字符串。

这是一个demo of my approach

代码语言:javascript
运行
复制
#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;
}

输出:

代码语言:javascript
运行
复制
Anna
Anna Lena
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37908218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档