我的数据文件(m; w,t,w,t,w,t ......,w,t)如下:
5762; 895,360851.301667
5763; 895,360851.301667
83495; 166,360817.861111
175040156; 7597,360815.840556,6905,363521.083889,774,363647.044722,20787,364348.666667,3158,364434.308333,3702,364480.726944,8965,365022.092778,1071,365043.283333,82,365544.150000,9170,365607.336667,46909,365635.057778,2165 ,365754.650000,895,366683.907500,121212,366689.450000,10571,366967.131944,1499,367707.580833,1790,368741.724167,7715,369115.480000
.........
我希望找到(w,t)对发生的行> = 7次。我用了这段代码:
ofstream MyTxtFile;
ifstream file("ipod-cascades.txt");
MyTxtFile.open("ipod-res.txt");
bool isWebId = true;
int n = 7,count=0;
string line;
string value;
smatch m;
while (getline(file, line)){
if (std::regex_search(line,m, std::regex(";([^,]*,[^,]*,){7,}"))){
count++;
std::stringstream linestream(line);
std::string tmp;
if (getline(linestream, value, ';')){
while (getline(linestream, tmp, ',')){
if (isWebId){
MyTxtFile << value << "," << tmp;
isWebId = false;
}
else{
MyTxtFile << "," << tmp << endl;
isWebId = true;
}
}
}
}
}
当我使用&#39; regex_match()&#39;它找不到任何行,当我使用&#39; regex_search()&#39;它找到一些行,然后给出stackoverflow异常。我的代码有什么问题? 顺便说一句,我使用的是VS2013。
答案 0 :(得分:0)
std::regex_match
将仅返回true
。也就是说,在要匹配的表达式之前和之后都不能有任何字符。使用std::regex_search
匹配部分字符串。
为什么std::regex_search
给出了堆栈溢出,这在代码摘录中并不容易看到。但是,如果找到匹配而不是从库中找到匹配项,则很可能是错误。通过调试器旋转它,您将很快看到堆栈溢出的原因。
答案 1 :(得分:0)
新版gcc不完全支持正则表达式。我在终端中使用了正则表达式并创建了一个新文件:
grep -E ";([^,]*,[^,]*,){7,}" file.txt>>res.txt