1

正規表現を使用して、" (引用符) の間にある文字列 (または QString) 内の何かを見つけたいと考えています。

私の単純な文字列: x="20.51167" で、20.51167 が必要です。

正規表現で可能ですか??

開始時に、次の文字列のようなものがありました:

<S id="1109" s5="1" nr="1183" n="Some text" test=" " x="20.53843" y="50.84443">

次のような正規表現を使用します: (nr=\"[0-9]+\") (y=\"[0-9 .^\"]+\")" etcx="20.51167" のような単純な文字列を取得します。多分これは間違った方法で、一度に引用符の間にある値を取得できますか??

4

5 に答える 5

2

これを試してみてください。テストされていない

="([^"]+)"

上記は、その間にあるものをすべてキャプチャします=" "

于 2012-07-13T10:02:52.070 に答える
2

あなたの特定の例では、これはうまくいきます:

#include <QRegExp>
#include <QString>
#include <iostream>
int main()
{
    //Here's your regexp.
    QRegExp re("\"[^\"^=]+\"");
    //Here's your sample string:
    QString test ="<S id=\"1109\" s5=\"1\" nr=\"1183\" n=\"Some text\" test=\" \" x=\"20.53843\" y=\"50.84443\">";
    int offset = 0;
    while( offset = re.indexIn( test, offset + 1 ) )
    {
        if(offset == -1)
            break;
        QString res = re.cap().replace("\"", "");
        bool ok;
        int iRes;
        float fRes;
        if( res.toInt( &ok ) && ok )
        {
            iRes = res.toInt();
            std::cout << "int: " << iRes << std::endl;
        }
        else if ( res.toFloat( &ok ) && ok )
        {
            fRes = res.toFloat();
            std::cout << "float: " << fRes << std::endl;
        }
        else
            std::cout << "string: " << res.toStdString() << std::endl;
    }
}

出力は次のようになります。

int: 1109
int: 1
int: 1183
string: Some text
string:  
float: 20.5384
float: 50.8444
于 2012-07-13T10:15:42.407 に答える
1

この式の場合:(nr = \ "[0-9] + \")(y = \"[0-9。^\"]+ \ ")"後の最後の引用符を削除し
ます)正規表現の場合は:

x = ^[0-9]+。[0-9]{5}

于 2012-07-13T10:08:04.297 に答える
0

引用符で囲まれたものを見つけたい場合、正規表現は次のようになるはずです。

"([^"]*)"

(引用符間の引用符ではないもの)

于 2012-07-13T10:03:59.693 に答える
0

キャプチャ グループを引用符内に移動するだけです。

x=\"([0-9.]+)\"
于 2012-07-13T10:04:09.240 に答える