gpt4 book ai didi

c++ - 为什么正则表达式在 C++ 的日语字符串中找不到 "("?

转载 作者:行者123 更新时间:2023-11-30 03:57:16 24 4
gpt4 key购买 nike

我有一个巨大的日语例句文件。它的设置使得一行是句子,然后下一行由句子中使用的单词组成,用 {}、() 和 [] 分隔。基本上,我想从文件中读取一行,只找到 () 中的单词,将它们存储在一个单独的文件中,然后从字符串中删除它们。

我正在尝试使用正则表达式来执行此操作。这是我正在处理的文本:

は 二十歳(はたち){20歳} になる[01]{になりました}

这是我用来查找 () 之间内容的代码:

std::smatch m;
std::regex e ("\(([^)]+)\)"); // matches things between ( and )

if (std::regex_search (components,m,e)) {
printToTest(m[0].str(), "what we got"); //Prints to a test file "what we got: " << m[0].str()
components = m.prefix().str().append(m.suffix().str());
//commponents is a string
printToTest(components, "[COMP_AFTER_REMOVAL]");
//Prints to test file "[COMP_AFTER_REMOVAL]: " << components
}

这是应该打印的内容:

what we got:はたち
[COMP_AFTER_REMOVAL]:は 二十歳(){20歳} になる[01]{になりました}

这是打印的内容:

what we got:は 二十歳(はたち
[COMP_AFTER_REMOVAL]:){20歳} になる[01]{になりました}

似乎不知何故 ha 被混淆为 (,这使得正则表达式从 ha 变为 )。我认为这是从文件中读入该行的方式的问题。也许它没有以某种方式被读取为 utf8。这是我的做法:

xml_document finalDoc;
string sentence;
string components;
ifstream infile;

infile.open("examples.utf");
unsigned int line = 0;
string linePos;
bool eof = infile.eof();
while (!eof && line < 1){
getline(infile, sentence);
getline(infile, components);
MakeSentences(sentence, components, finalDoc);
line++;
}

有什么问题吗?有小费吗?需要更多代码?请帮忙。谢谢。

最佳答案

你忘了转义你的反斜杠。编译器看到 "\(([^)]+)\)" 并将其解释为 (([^)]+)) 这不是您想要的正则表达式.

您需要输入 "\\(([^)]+)\\)"

关于c++ - 为什么正则表达式在 C++ 的日语字符串中找不到 "("?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28093682/

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