gpt4 book ai didi

c++ - 传递字符串参数,从文件中读取

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:56 26 4
gpt4 key购买 nike

我正在尝试在文本中查找 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;
}

我有以下正则表达式:

"\\b[0-9]{3}\\b.*(Street).*[0-9]{5}"

而开头提到的原文是:

  • way 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;

}

最佳答案

请注意,将正则表达式直接写入 C++ 代码和从文件中读取正则表达式时存在明显的句法差异。

在 C++ 中,反斜杠字符具有转义语义,因此要将文字反斜杠放入字符串文字中,您必须使用反斜杠对它本身进行转义。所以要在内存中得到一个两个字符的字符串\b,你必须使用字符串文字"\\b"。这两个反斜杠被 C++ 编译器解释为要存储在文字中的单个反斜杠字符。换句话说,strlen("\\b") 是 2。

另一方面,文本文件的内容由您的程序读取,而不会被 C++ 编译器处理。因此,要将两个字符 \b 放入从文件读取的字符串中,只需将两个字符的字符串 \b 写入文件.

关于c++ - 传递字符串参数,从文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17831603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com