gpt4 book ai didi

c++ - QT C++ QRegularExpression 多重匹配

转载 作者:太空狗 更新时间:2023-10-29 20:41:11 26 4
gpt4 key购买 nike

我想使用正则表达式从 QString (.html) 中提取信息。我明确想使用正则表达式(无解析器解决方案)和类 QRegularExpression (出于多种原因,例如:Reasons)。

为了简化方面,这里是一个问题等价任务。

构造源字符串:

<foo><bar s>INFO1.1</bar> </ qux> <peter></peter><bar e>INFO1.2
</bar><fred></ senseless></fred></ xx><lol></lol></foo><bar s>INFO2.1</bar>
</ nothing><endlessSenselessTags></endlessSenselessTags><rofl>
<bar e>INFO2.2</bar></rofl>

*注意:*可能会有更多或更少的信息和额外的无感标签。 (例如 6 个信息)

通缉:

Info1.1 和 Info1.2 以及 Info2.1 和 Info2.2(例如在列表中)

尝试

1.

QRegularExpression reA(".*<bar [es]>(.*)</bar>.*", QRegularExpression::DotMatchesEverythingOption);

->

INFOa</bar> </ qux> <peter></peter><bar e>INFOb
</bar><fred></ senseless></fred></ xx><lol></lol></foo><bar s>INFOc</bar>
</ nothing><endlessSenselessTags></endlessSenselessTags><rofl>
<bar e>INFOd

2.

QRegularExpression reA("(.*<bar [es]>(.*)</bar>.*)*", QRegularExpression::DotMatchesEverythingOption);

->毫无意义

问题:正则表达式总是与整个字符串相关。 <bar s>INFO</bar><bar s>INFO</bar>会选择第一个 <bar s>最后一个和</bar> .想要的是第一个

使用 QRegExp 似乎有一个解决方案,但我想用 QRegularExpression 来解决这个问题。

最佳答案

也许你可以试试这个

QRegularExpression reA("(<bar [se]>[^<]+</bar>)");

QRegularExpressionMatchIterator i = reA.globalMatch(input);
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
if (match.hasMatch()) {
qDebug() << match.captured(0);
}
}

这给了我这个输出

"<bar s>INFO1.1</bar>" 
"<bar e>INFO1.2
</bar>"
"<bar s>INFO2.1</bar>"
"<bar e>INFO2.2</bar>"

虽然这个表达式

QRegularExpression reA("((?<=<bar [se]>)((?!</bar>).)+(?=</bar>))",
QRegularExpression::DotMatchesEverythingOption);

有了这个输入

<foo><bar s>INFO1</lol>.1</bar> </ qux> <peter></peter><bar e>INFO1.2
</bar><fred></ senseless></fred></ xx><lol></lol></foo><bar s>INFO2.1</bar>
</ nothing><endlessSenselessTags></endlessSenselessTags><rofl>
<bar e>INFO2.2</bar></rofl>

给我输出

"INFO1</lol>.1" 
"INFO1.2
"
"INFO2.1"
"INFO2.2"

关于c++ - QT C++ QRegularExpression 多重匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489723/

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