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

Mau*_*Mau 3 c++ regex string numbers c++11

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

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:]]+)?))?

但这给出了相同的结果。

解决办法是什么?

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

Wik*_*żew 5

实际上,C++ regex 模块支持 look-aheads

这是我的建议:

#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;
}
Run Code Online (Sandbox Code Playgroud)

IDEONE 演示

由于原始字符串文字声明,不需要使用双反斜杠\s

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

请注意,如果您需要提取十进制值,例如.5,您需要

R"((?:^|\s)([+-]?[[:digit:]]*\.?[[:digit:]]+)(?=$|\s))"
Run Code Online (Sandbox Code Playgroud)