使用C ++标准模板库函数regex_replace()
,如何从std::string
中删除非数字字符并返回std::string
?
此问题与question 747735不重复 因为那个问题要求如何使用TR1 / regex,我就是 请求如何使用标准STL正则表达式,并给出答案 仅仅是一些非常复杂的文档链接。 C ++正则表达式 文档非常难以理解,文档记录很少, 在我看来,即使一个问题指出standard C++
regex_replace
documentation, 它对新编码员来说仍然没有用处。
答案 0 :(得分:3)
// assume #include <regex> and <string>
std::string sInput = R"(AA #-0233 338982-FFB /ADR1 2)";
std::string sOutput = std::regex_replace(sInput, std::regex(R"([\D])"), "");
// sOutput now contains only numbers
请注意,R"..."
部分表示原始字符串文字,并且不会像C或C ++字符串那样评估转义码。这在进行正则表达式时非常重要,可以让您的生活更轻松。
这是一个方便的单字符正则表达式原始文字字符串列表,供您std::regex()
用于替换方案:
R"([^A-Za-z0-9])"
或R"([^A-Za-z\d])"
=选择非字母和非数字R"([A-Za-z0-9])"
或R"([A-Za-z\d])"
= select alphanumeric R"([0-9])"
或R"([\d])"
=选择数字R"([^0-9])"
或R"([^\d])"
或R"([\D])"
=选择非数字答案 1 :(得分:3)
正则表达式在这里过度。
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
inline bool not_digit(char ch) {
return '0' <= ch && ch <= '9';
}
std::string remove_non_digits(const std::string& input) {
std::string result;
std::copy_if(input.begin(), input.end(),
std::back_inserter(result),
not_digit);
return result;
}
int main() {
std::string input = "1a2b3c";
std::string result = remove_non_digits(input);
std::cout << "Original: " << input << '\n';
std::cout << "Filtered: " << result << '\n';
return 0;
}
答案 2 :(得分:0)
可接受的答案(如果适合给定样本的细节)。 但是它将失败,例如“ -12.34”(这将导致“ 1234”)。 (请注意样本可能是负数)
则正则表达式应为:
(-|\+)?(\d)+(.(\d)+)*
说明:(可选(“-”或“ +”))与(一个数字,重复1到n次)与(可选以-结尾::(一个“。”,后跟(一个数字,重复1到n次) )
有点过分,但是我一直在寻找这个页面,因此该页面首先出现在我的搜索中,因此我为以后的搜索添加了答案。