【问题标题】:regex_replace issueregex_replace 问题
【发布时间】:2013-02-08 19:34:14
【问题描述】:

我正在使用 C++11(Windows 7 64 位,Visual Studio 2012)

我正在使用循环将某些子字符串替换为另一个子字符串。 我有一个文件,其中的数字用双斜杠 (//) 分隔。 例如:

10//20//1 3//4//5 5//2//1 to 10 20 1 3 4 5 5 2 1

但是,当我尝试使用 regex 执行此操作时,似乎我做错了什么。没发生什么事。另外,我在哪里可以阅读更多关于 regex C++11

string fData(data.substr(2));
string replaceStr("10//20//1 3//4//5 5//2//1");
regex r("//"
regex_replace(fData,r," ");

但什么也没发生。

就像我之前说的,如果您还可以指出我可以阅读更多关于此的网页,除了答案。我有它的工作,但我想开始使用正则表达式。

谢谢

【问题讨论】:

    标签: c++ regex string c++11 visual-studio-2012


    【解决方案1】:

    regex_replace 不对字符串进行就地编辑;它返回输出字符串。

    例如: auto out = regex_replace(fData,r," ");

    在本例中,out 将是一个期望值的字符串(“10 20 1 3 4 5 5 2 1”)。 This cheat sheet 非常有用(来自http://cpprocks.com/regex-cheatsheet/)。享受吧!

    【讨论】:

    • 在性能方面。使用 regex_replace 是否与循环替换和查找替换一样?
    • regex_replace 似乎在底层使用了正则表达式迭代器(不要相信我的话)。从我从其他答案和互联网上看到的情况来看,与其他语言的正则表达式实现(例如 Python)相比,C++11 regex_replace 相当慢。您可以自行对其进行基准测试,看看哪个版本适合您的性能需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2017-08-28
    • 2021-01-30
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多