0

我正在尝试获取多个标签中的文本,如下所示:

文本文件:

Internal Auto-Configured Settings File
________________________________________
(( Do not attempt to edit it manually ))
________________________________________
# Saved certifications:
<ca>
Text which I want to extract
</ca>
...
<cert>Another text I want to extract</cert>
...

在我的代码中,我打开前一个文件并读取其内容并将其存储到QString. 到目前为止,我已经完成了以下操作,但没有成功:

QRegularExpression regex("<ca>(.*)</ca>", QRegularExpression::MultilineOption);
QRegularExpressionMatch match = regex.match(content);
QString ca = match.captured(1);

qDebug() << ca;
qDebug() << "\n\nDone!!";

<< 也做了同样的事情,<cert>但我得到了一个空字符串。

4

2 回答 2

0
<ca>(.*?)<\/ca>|<cert>(.*?)<\/cert>

你可以试试这个。不要忘记添加标志sDOTALL

见演示。

http://regex101.com/r/sU3fA2/30

于 2014-10-28T15:16:43.570 回答
0

而不是QRegularExpression::MultilineOption,使用QRegularExpression::DotMatchesEverythingOption. 问题是由于.在默认模式下不匹配换行符。

引用文档:

模式字符串中的点元字符 ( .) 可以匹配主题字符串中的任何字符,包括换行符(通常点不匹配换行符)。此选项对应/s于 Perl 正则表达式中的修饰符。

确保</ca>仅在输入中出现一次。

如果不是这种情况,请稍微修改一下您的表达式:

"<ca>(.*?)</ca>"

这使量词变得懒惰(而不是默认的贪婪),并使其匹配最接近的结束标记</ca>

于 2014-10-28T15:17:28.857 回答