gpt4 book ai didi

c++ - C++中的QRegExp捕获部分字符串

转载 作者:行者123 更新时间:2023-11-28 05:02:28 25 4
gpt4 key购买 nike

我正在尝试使用 Qt 在我的 C++ 应用程序中执行正则表达式。我以前在 C++ 中用 Qt 做过类似的正则表达式,但事实证明这个很难。

给定一个字符串,字符串末尾带有可选的 _#,我想提取字符串之前的部分。

例子:

"blue_dog" should result "blue_dog"
"blue_dog_1" should result "blue_dog"
"blue_dog_23" should result "blue_dog"

这是我目前的代码,但它还不能工作:

QString name = "blue_dog_23";
QRegExp rx("(.*?)(_\\d+)?");
rx.indexIn(name);
QString result = rx.cap(1);

我什至在许多变体中尝试了以下附加选项,但没有成功。我上面的代码总是以“”结果:

rx.setMinimal(TRUE);   
rx.setPatternSyntax(QRegExp::RegExp2);

最佳答案

有时不将所有内容打包到一个正则表达式中会更容易。在您的情况下,您可以将操作限制在现有 _# 后缀的情况下。否则结果为 name:

QString name = "blue_dog_23";
QRegExp rx("^(.*)(_\\d+)$");
QString result = name;
if (rx.indexIn(name) == 0)
result = rx.cap(1);

或者,您可以拆分最后一位并检查它是否是一个数字。一个紧凑的(但可能不是最可读的)解决方案:

QString name = "blue_dog_23";
int i = name.lastIndexOf('_');
bool isInt = false;
QString result = (i >= 0 && (name.mid(i+1).toInt(&isInt) || isInt)) ? name.left(i) : name;

关于c++ - C++中的QRegExp捕获部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579233/

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