【发布时间】:2020-02-13 11:26:08
【问题描述】:
我想在if 语句中将input_string 向左/向右修剪,然后将其传递给regex_match,我尝试boost trim_right and trim_left 失败,但不知道如何解决它。
我如何简单地修剪输入,以便前两个输入 " 0 " 和 " 0.1 " 成为有效数字?
#include <string>
#include <boost/algorithm/string.hpp>
#include <iostream>
#include <regex>
#include <vector>
using namespace std;
int main() {
vector<string> string_vector = {" 0 "," 0.1 ","abc","1 a","2e10","-90e3","1e","e3","6e-1","99e2.5","53.5e93","--6","-+3","95a54e53"};
regex expression_two("^[+-]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*|[0-9]+)[Ee][+-]?[0-9]+$|^[+-]?(?:[0-9]*\\.[0-9]+|[0-9]+\\.[0-9]*|[0-9]+)$|^[+-]?[0-9]+$");
for (const auto &input_string: string_vector) {
if (std::regex_match(input_string, expression_two))
cout << "[0-9] Char Class: '" << input_string << "' is a valid number." << endl;
}
return 0;
}
电流输出
[0-9] Char Class: '2e10' is a valid number.
[0-9] Char Class: '-90e3' is a valid number.
[0-9] Char Class: '6e-1' is a valid number.
[0-9] Char Class: '53.5e93' is a valid number.
所需的输出
[0-9] Char Class: ' 0 ' is a valid number.
[0-9] Char Class: ' 0.1 ' is a valid number.
[0-9] Char Class: '2e10' is a valid number.
[0-9] Char Class: '-90e3' is a valid number.
[0-9] Char Class: '6e-1' is a valid number.
[0-9] Char Class: '53.5e93' is a valid number.
【问题讨论】:
-
在有趣的模式之前和之后允许空格,
regex expression_two(R"aw(^ *([+-]?(?:[0-9]*\.[0-9]+|[0-9]+\.[0-9]*|[0-9]+)[Ee][+-]?[0-9]+|[+-]?(?:[0-9]*\.[0-9]+|[0-9]+\.[0-9]*|[0-9]+)|[+-]?[0-9]+) *$)aw"); -
不客气。内森对修剪的回答很准确,对另一个问题的交叉引用也是如此。我使用 Boost,但有些人发现 Boost 有点太大(或令人生畏?),无法在他们的项目中使用它。
标签: c++ string algorithm boost