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 .^\"]+\")" etc我得到了像 x="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 回答