我正在寻找一个正则表达式模式,如果在给定的字符串上找到7个数字,该模式将返回true。没有顺序,因此,如果将字符串设置为:“ 100 my,str1ng y000”,它将捕获该字符串。
答案 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 ++示例
#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
进行计数。更快,更轻松。
希望这可以帮助 。 。