1

我有一个非常复杂的 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..."

我显然可以在两个或多个正则表达式/替换中做到这一点,并在两者之间测试存在

但是是否有可能只更换一次?如何 ?最好的方法是什么?

编辑

正如 amartel 向我展示的那样,根本没有问题,实际上我的错误是我尝试访问第 8 个捕获,但只有 7 个,所以 \\8 返回我 \8

4

1 回答 1

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"

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

于 2013-03-28T10:34:26.313 回答