2012-07-13 75 views
1

我想用正则表达式来查找字符串(或QString的)东西,是间:20.51167" “(引号)正则表达式或没有(获得未满足正则表达式中的所有文本)

我简单的串x =”。我想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”。也许这是错误的方式,我可以得到一段时间内报价之间的价值?

+0

另外,关于不试图使用正则表达式解析XML/HTML的义务性评论:http://stackoverflow.com/a/1732454/183339。你可以使用QXmlStreamReader吗? – 2012-07-13 12:17:07

+0

@DaveMateer我认为这不是使用QXmlStreamReader :)。 – poplawskidaniel 2012-07-13 12:31:06

回答

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 
+0

谢谢。但是输出仍然有引号。我的下一步是将输出更改为字符串或整数或双精度,并将它们放到数据库中。所以我需要输出没有引号,我需要知道什么是什么(这是我为每一个做出不同的正则表达式的原因。 – poplawskidaniel 2012-07-13 10:29:06

+0

@poplawskidaniel,它有引号,因为它是一个QStrings列表。使用QString的方法将它们转换为适当的类型(例如'toFloat()')方法,你就完成了。 – SingerOfTheFall 2012-07-13 10:30:55

+0

它有内部引号,所以使用'ToInt()','ToFloat()'等转换不起作用(总是返回0)试试 – poplawskidaniel 2012-07-13 10:59:42

2

试试这个作品。 未经测试

="([^"]+)" 

上述捕捉任何在两者之间="

+0

投票赞成“未经测试” – gaussblurinc 2012-07-13 10:03:38

+0

不幸的是,这也捕获=“”的迹象。使用QRegExp类和QString.contains – poplawskidaniel 2012-07-13 10:14:31

0

"如果你想找到引号里的东西,我想正则表达式应该是:

"([^"]*)" 

(什么这不是引号之间的引号)

+0

类似上面的答案:这也捕获“”符号。 – poplawskidaniel 2012-07-13 11:02:01

0

你只需要移动你的捕获内部组引号:

x=\"([0-9.]+)\" 
1

在此表达式中:(NR = \ “[0-9] + \”)(Y = \ “[0-9^\”] + \“) “ 删除后的最后一个引号)
对于正则表达式的try:

X =^[0-9] + [0-9] {5}

相关问题