텍스트에서 regex
패턴을 찾으려고합니다. 텍스트를 호출 해 봅시다 : 원본 텍스트. 다음이 (가) patternFinder()
프로그램에 대한 코드는 다음 regular Expression
다음 내가 가진문자열 전달 인자, 파일에서 읽음
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;
}
:
"\\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;
}
'char * buffer = new char [length]'를 사용한다면, 실제로는'buffer [length]'에 접근해서는 안된다. 더 크게 만들자 :'char * buffer = new char [length + 1]' – Messa
파일의 정확한 내용 (정규 표현식을 포함하고있는 내용)을 보여줄 수 있습니까? 파일에서 읽을 때 두 개가 아닌 하나의 백 슬래시가 필요하기 때문에 묻습니다. – Angew
@ 답장을 보내 주신 데 대한 감사의 말을 전합니다. 원하는 경우 솔루션을 답으로 쓸 수 있고 다른 사람들도 사용할 수 있도록 받아 들일 수 있습니다. –