【问题标题】:Regex with Qt capture some text使用 Qt 的正则表达式捕获一些文本
【发布时间】:2014-03-06 10:49:18
【问题描述】:

我想在以下字符串中捕获第二次出现的被星号替换的文本:

&nbsp;SW * <br>

即在 QString 中以 &amp;nbsp;SW 开头并以 &lt;br&gt; 结尾的字符串,使用带有 Qt 的 RegEx。

这里是一个例子:字符串是

&nbsp;&nbsp;SW = min(1, max(0, pow(10, -0.2 - 6.5 ) ** (1.0 / 0.2)))<br>

预期结果是

= min(1, max(0, pow(10, -0.2 - 6.5 ) ** (1.0 / 0.2)))

到目前为止,我的 QRegExp rx("^[\&amp;nbsp;SW](.*)[&lt;br&gt;]$"); 尚未编译。

你会怎么做?

【问题讨论】:

  • 我将从一个关于正则表达式的教程开始。查看一些示例以及如何编写语法。然后,使用在线正则表达式测试器尝试一些示例行,然后从那里开始工作。

标签: c++ regex qt capture qstring


【解决方案1】:

编译问题可能是由于试图转义 & 符号 (\&amp;)。但除此之外,您的正则表达式大部分是正确的,只是过度使用字符组 ([]),它们不用于分组。这个表达式在我的测试中有效:&amp;nbsp;SW(.*)&lt;br&gt;,所以在你的情况下,你会做类似的事情

QRegExp rx("&nbsp;SW(.*)<br>")

【讨论】:

    【解决方案2】:

    确切的模式是QLatin1String(".*&amp;nbsp;SW([^&lt;]*)&lt;br&gt;.*"),为了捕获这个代码对我有用

           QRegExp rx(QLatin1String(".*&nbsp;SW([^<]*)<br>.*"));
    
           int p = 0;
           QString cap ;
           if((p = rx.indexIn(str, p)) != -1) 
               cap = rx.cap(1).trimmed();
    

    nota bene:应该使用cap(1) 捕获括号内元素的第一次出现,而不是捕获整个模式而不是括号内容的cap(0)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多