c++ - 正则表达式只有字符串中的数字 C++

标签 c++ regex string c++11 numbers

我正在寻找一个正则表达式来查找字符串中的数字;如果我有这样的字符串:

li 12.12 si 43,23 45 31 uf 889 uf31 3.12345

我只想找到数字:

12.12 45 31 889 3.12345

我尝试了以下模式:

((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?

但输出包括 uf3143,23

我试过:

(?!([a-z]*((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?)) ?[a-z]*))?((\\+|-)?[[:digit:]]+)(\\.(([[:digit:]]+)?))?

但这给出了相同的结果。

解决方案是什么?

解决方案 留给后代的解决方案:

最佳答案

实际上,C++ 正则表达式模块支持先行

这是我的建议:

#include <iostream>
#include <regex>
using namespace std;

int main() {
    std::string buffer = " li 12.12 si 43,23 45 31 uf 889 uf31 3.12345";
    std::regex rx(R"((?:^|\s)([+-]?[[:digit:]]+(?:\.[[:digit:]]+)?)(?=$|\s))"); // Declare the regex with a raw string literal
    std::smatch m;
    std::string str = buffer;
    while (regex_search(str, m, rx)) {
        std::cout << "Number found: " << m[1] << std::endl; // Get Captured Group 1 text
        str = m.suffix().str(); // Proceed to the next match
    }  
    return 0;
}

参见 IDEONE demo

由于原始字符串字面量声明,不需要在 \s 中使用双反斜杠。

先行 (?=$|\s) 检查是否存在,但不消耗空格,可以提取连续的数字。

注意,如果你需要提取像.5这样的十进制值,你需要

R"((?:^|\s)([+-]?[[:digit:]]*\.?[[:digit:]]+)(?=$|\s))"

关于c++ - 正则表达式只有字符串中的数字 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33520934/

相关文章:

regex - 如何将正则表达式绑定(bind)到 emacs 中的组合键?

python - pandas read_csv 修复列以读取数据中带有换行符的数据

java - 在不使用 arraylist 的情况下使用 compareTo 在 Java 上排序

c - 如何通过 C 中的递归排列来更改叶位置字符串?

r - 询问〜特殊〜并返回答案的函数

c++ - Cin 读取数字并检查整数

c++ - 自动调用 C++ 基类方法

c++ - 在 C++ 中使用 linux 系统调用和文件和文件夹管理

c++ - 如何修复 C++ 中的 int-to-bool 警告?

java - 正则表达式匹配空白和非空白