可选的捕获组

时间:2013-03-28 09:34:33

标签: regex qt

我有一个非常复杂的RegEx,我有一些捕获组

但是这个群体属于一个更大的群体,而这个更大的群体是可选的

这里看一下情况(我使用Qt和QRegularExpression,但我认为它并不重要):

QRegularExpression regex("(.*)(?:([0-9]{2}) ([0-9]{2}) ([0-9]{2}))?(.*)");

现在我要替换匹配

QString str = ".....some text....";
str.replace(regex, "\\1__\\3__\\5");

现在有一个问题,因为3个捕获组是可选的,有时候\\3不存在。

如果其中一个捕获组不存在,我想要的是获取空字符串:

如果\\3存在,我想:

"\\1__\\3__\\5"

但如果没有,我想:

"\\1____\\5"

这是我得到的,如果它不存在:

"...text...__\3__...text..."

我显然可以在两个或更多regexp / replace中进行,并测试存在于

之间

但是有可能只用一次替换吗?如何 ?这样做的最佳方式是什么?

编辑

正如amartel告诉我的那样,没有任何问题,事实上我的错误是我试图访问第8次捕获,但只有7次,所以\\ 8返回我\ 8

1 个答案:

答案 0 :(得分:2)

我试过了:

QRegExp rexp("(A)(?:([0-9]{2}) ([0-9]{2}) ([0-9]{2}))?(Z)");

QString s1("qA11 22 33Zq");
QString s2("wAZw");

s1.replace(rexp, "\\1__\\3__\\5");
s2.replace(rexp, "\\1__\\3__\\5");

qDebug() << s1;
qDebug() << s2;

输出结果为:

"qA__22__Zq"
"wA____Zw"

愿你的问题出在其他地方吗?