我正在尝试regex
在文本中找到一种模式。我们称文本为:原始文本。以下是该patternFinder()
程序的代码:
vector <pair <long,long> >CaddressParser::patternFinder(string pattern)
{
string m_text1=m_text;
int begin =0;
int end=0;
smatch m;
regex e (pattern);
vector<pair<long, long>> indices;
if(std::regex_search(m_text1,m,e))
{
begin=m.position();
end=m.position()+m.length()-1;
m_text1 = m.suffix().str();
indices.push_back(make_pair(begin,end));
while(end<m_length&&std::regex_search(m_text1,m,e))
{
begin=end+m.prefix().length()+1;
end=end+m.prefix().length()+m.length();
indices.push_back(make_pair(begin,end));
m_text1 = m.suffix().str();
}
return indices;
}
else return indices;
}
我有以下内容regular Expression
:
"\\b[0-9]{3}\\b.*(Street).*[0-9]{5}"
而开头提到的原文是:
- 路 10.01.2013 700 West Market Street OH 35611 asdh
并且只有粗体文本应该与正则表达式匹配。现在的问题是,当正则表达式作为从文本文件中读取的字符串传递时,patternFinder()
它无法识别模式。尽管当直接字符串(与文本文件中的字符串相同)作为参数传递给patternFinder()
有用。这个问题可能来自哪里?
以下是我fileReader()
认为不太相关的函数代码:
string CaddressParser::fileReader(string fileName)
{
string text;
FILE *fin;
fin=fopen(fileName.c_str(),"rb" );
int length=getLength(fileName);
char *buffer= new char[length];
fread(buffer,length,1,fin);
buffer[length]='\0';
text =string(buffer);
fclose(fin);
return text;
}