我写的简单正则表达式有问题:
std::regex reg = std::regex("(.*)[a-zA-Z]+(.*)");
它可以在一个简单的程序中工作:
#include <regex>
#include <exception>
#include <iostream>
int main(int argc, char *argv[])
{
std::regex reg = std::regex("(.*)[a-zA-Z]+(.*)");
std::string s("string");
if(std::regex_match(s, reg)){
std::cout << "MATCH !" << std::endl;
}
return 0;
}
但我有一个文件,我想用这个正则表达式来处理它并且它不起作用。文件内容:
313801.91 323277.59 861.89
313770.97 323272.13 868.89
Start
End
313793.19 323290.19 864.89
我的计划:full program code; input file
...
std::ifstream input;
std::string cell;
std::regex reg = std::regex("(.*)[a-zA-Z]+(.*)");
input.open("a.txt", std::ofstream::in);
while (std::getline(input, cell))
{
// reject the row if there is any text in it
if( std::regex_match(cell, reg) ){
// never hit!
continue;
}
}
...
当我想要打印出来时,我得到了奇怪的结果:
cout << "_____\"" << cell << "\"____" << endl;
"____"Start
答案 0 :(得分:2)
问题在于行尾。我有一个文件已保存(可能在Windows上)与CLRF行结尾。
我将我的正则表达式更新为此,现在它可以正常工作:
std::regex reg("(.*)[a-zA-Z]+(.*)(\r\n|\n|\r)");