正则表达式-计算所有数字

时间:2019-07-07 09:23:50

标签: c++ regex

我正在寻找一个正则表达式模式,如果在给定的字符串上找到7个数字,该模式将返回true。没有顺序,因此,如果将字符串设置为:“ 100 my,str1ng y000”,它将捕获该字符串。

2 个答案:

答案 0 :(得分:0)

仅RegEx不会为您计算确切的出现次数,即使字符串中的位数超过7位,它也会返回true,因为它会尝试找出字符串中的至少7位数字。

您可以使用下面的代码测试任意字符串中数字的确切位数(在您的情况下为7):

var temp = "100 my, str1ng y000  3c43fdgd";
var count = (temp.match(/\d/g) || []).length;
alert(count == 7);

答案 1 :(得分:0)

我将向您展示一个C ++示例

  • 显示用于提取数字组的正则表达式
  • 显示用于匹配至少7位数字的正则表达式
  • 显示是否与请求的谓词匹配
  • 显示字符串中的位数(不需要正则表达式)
  • 显示数字组
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <regex>

// Our test data (raw string). So, containing also \" and so on
std::string testData("100 my, str1ng y000");

std::regex re1(R"#((\d+))#");       // For extracting digit groups 
std::regex re2(R"#((\d.*){7,})#");  // For regex match

int main(void)
{
    // Define the variable id as vector of string and use the range constructor to read the test data and tokenize it
    std::vector<std::string> id{ std::sregex_token_iterator(testData.begin(), testData.end(), re1, 1), std::sregex_token_iterator() };

    // Match the regex. Should have at least 7 digits somewhere
    std::smatch base_match;
    bool containsAtLeast7Digits = std::regex_match(testData, base_match, re2);

    // Show result on screen
    std::cout << "\nEvaluating string  '" << testData << 
        "'\n\nThe predicate 'contains-at-leats-7-digits' is " << std::boolalpha << containsAtLeast7Digits <<
        "\n\nIt contains overall " <<
        std::count_if(
            testData.begin(), 
            testData.end(), 
            [](const char c) {
                return std::isdigit(static_cast<int>(c)); 
            }
        ) << " digits and " << id.size() << " digit groups. These are:\n\n";

    // Print complete vector to std::cout
    std::copy(id.begin(), id.end(), std::ostream_iterator<std::string>(std::cout, "\n"));

    return 0;
}

请注意:使用std::count进行计数。更快,更轻松。 希望这可以帮助 。 。