Я пытаюсь найти шаблон 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;
}
Если у вас есть 'char * buffer = new char [length]', вам действительно не следует обращаться к 'buffer [length]', это после конца массива. Сделайте его больше: 'char * buffer = new char [length + 1]' – Messa
Можете ли вы показать точное содержимое файла (содержащего регулярное выражение)? Я спрашиваю, потому что, когда вы читаете файл, вам нужны одиночные обратные косые черты вместо двойных. – Angew
@ Спасибо за ваш ответ, в котором проблема была. Если вы хотите, вы можете написать свое решение в качестве ответа, и я могу принять его, чтобы другие могли его использовать. –