已经有几个线程处理格式化字符串的读取,但我的问题是我的文本文件偶尔会有拼写错误。这是我的大部分字符串的示例:
Par(custom)1929;
我遇到的问题是一些字符串看起来像这样:
Par({custom)1929:
我想知道如何识别不遵循正确格式的字符串,我会抛出一个错误。我只是找不到可靠的方法来搜索字符串和查找拼写错误。
编辑:
这是我使用的示例代码,字符串中没有拼写错误。如果字符串中没有拼写错误,这将得到中间词“custom”。单词是字符串。 com.fi 是我存储信息的数据元素。
int left = word.find("(");
int right = word.find(")");
com.fi = word.substr(left+1,right - lbraq - 1);
最佳答案
您的格式化字符串是在不同的行上还是它们之间有一些统一的间距?如果是这样,您可以结合使用 std::ifstream
和 C++ 正则表达式库,如下所示:
std::ifstream inf(...); // filename
const std::regex rgx("Par\\(\\w+\\)[0-9]{4}");
std::string read;
while (std::getline(inf, read)) {
if (!std::regex_match(read, rgx)) { /* error handling here */ }
}
双反斜杠防止编译器将转义的正则表达式字符读取为实际转义字符,而 w 表示单词,如数字和字母,而 plus 表示匹配一个或多个单词字符。括号内的范围是一个捕获组,用于捕获您在其中指定的某些字符,在本例中是任何数字字符。捕获组后面的大括号在其中指定了我们要匹配的组的数量,在本例中为四个字符。我避开了括号,因为它们对正则表达式匹配很重要。
如果我在此处使用的格式与您的格式不匹配,C++ 使用的正则表达式语法很大程度上基于 JavaScript 的语法,并且您可以使用多个站点来测试 JavaScript 正则表达式,例如 regex101.com。
关于c++ - 如何读取有拼写错误的格式化数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48675831/