Qt5的正则表达式引擎不支持后行断言,字符串替换处理之二

由于Qt5的正则表达式引擎不支持后行断言,我们需要使用一种不同的方法。在Qt中,我们可以通过先匹配Lang::Tr(,然后确保在接下来的字符中没有出现我们想要匹配的tr("文"),或者通过其他逻辑来手动检查。如下代码:

#include <QString>
#include <QDebug>

QString replaceTrWithoutLangTr(const QString &input) {
    // 定义要查找和替换的字符串
    QString trString = "tr(\"文\")";
    QString langTrString = "Lang::Tr(";
    QString replacementString = "Lang::Tr(tr(\"文\"),\"1\")";

    QString result = input;
    // 遍历输入字符串
    int index = 0;
    while (index < result.length())
    {
        // 检查当前位置是否包含 tr(
        int trIndex = result.indexOf(trString, index);
        if (trIndex != -1)
        {

            // 判读前面是否有Lang::Tr(
            int langTrIndex = trIndex-langTrString.count()-5;
            langTrIndex = langTrIndex<0?0:langTrIndex;
            QString tempLangTr = result.mid(langTrIndex,langTrString.count()+5);
            if(tempLangTr.contains(langTrString))
            {
                //包含
            }
            else
            {
                //不包含,替换
                // 找到了 tr(,现在查找它的结束右括号
                int closingParenthesisIndex = result.indexOf(')', trIndex + trString.length());

                result.replace(trIndex,trIndex + trString.length(),replacementString);
            }

        }

        index++;
    }

    // 返回处理后的字符串
    return result;
}

int main() {
    QString test1 = "55566tr(\"文\")11122";
    QString test2 = "55566Lang::Tr(tr(\"文\"),\"100\")11122";
    QString test3 = "some text tr(\"文\") more text";
    QString test4 = "some text Lang::Tr(something) tr(\"文\")";
    QString test5 = "Lang::Tr(other) some text tr(\"文\")";

    QString new_test1 = replaceTrWithoutLangTr(test1);
    qDebug() <<test1<<"->"<<new_test1;
    QString new_test2 = replaceTrWithoutLangTr(test2);
    qDebug() <<test2<<"->"<<new_test2;
    qDebug() << replaceTrWithoutLangTr(test3);
    QString new_test3 = replaceTrWithoutLangTr(test3);
    qDebug() <<test3<<"->"<<new_test3;
    QString new_test4 = replaceTrWithoutLangTr(test4);
    qDebug() <<test4<<"->"<<new_test4;
    QString new_test5 = replaceTrWithoutLangTr(test5);
    qDebug() <<test5<<"->"<<new_test5;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liwension

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值