1

私はいくつかのキャプチャグループを持つ非常に複雑な正規表現を持っています

ただし、このグループはより大きなグループにあり、このより大きなグループはオプションです

ここで状況を見てください(私はそのために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存在しない場合があるため、現在問題があります。

私が望むのは、キャプチャグループの1つが存在しない場合に空の文字列を取得することです:

存在する場合\\3、私は欲しい:

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

しかし、そうでない場合、私は欲しい:

"\\1____\\5"

存在しない場合は次のようになります。

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

私は明らかに2つ以上の正規表現/置換でそれを行うことができ、その間の存在をテストします

しかし、1回の置換でそれを行うことは可能ですか? そしてどうやって ?そして、それを行う最良の方法は何ですか?

編集

amartel が示すように、まったく問題はありません。実際、私の間違いは、8 番目のキャプチャーにアクセスしようとしたことですが、7 しかなかったので、\\8 return me \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 に答える