0

我是正则表达式的初学者,我想剪切一些放置在另外两个单词之间的文本。我正在使用QT来做到这一点。一些例子:

<li class="wx-feels">
Feels like <i><span class="wx-value" itemprop="feels-like-temperature-fahrenheit">55</span>&deg;</i>
</li>

我想得到 Feels like <i><span class="wx-value" itemprop="feels-like-temperature-fahrenheit">55</span>&deg;

从上面的代码,特别是一个数字55 ,我的想法是先从文本中剪切整行,然后在其中搜索 nubers,但我无法从整个文本中恢复它。

我输入了类似的东西:

QRegExp rx("(Feels like <i><span class=\"wx-value\" itemprop=\"feels-like-temperature-fahrenheit\">)[0-9]{1,3}(</span>&deg;</i>)");
QStringList list;
list = all.split(rx);

整个文本在哪里 all ,但列表只包含我不想要的那些子字符串,是否有可能将 QString 分成三部分?第一个 - 开头的文本(我不想要) 第二个 - 想要的文本 第三个 - 其余的文本?

4

1 回答 1

0

描述

此正则表达式将收集 li 标签内的内部字符串,其中 li 标签的类为wx-feels,它还将捕获 span 标签内的数值。

<li\b[^>]*\bclass=(["'])wx-feels\1[^>]*?>(.*?\bitemprop=(['"])feels-like-temperature-fahrenheit\3[^>]*>(\d+).*?)<\/li>

在此处输入图像描述

团体

第 0 组获取整个字符串,包括打开和关闭 LI 标记

  1. 获取 LI 类属性的开放引号。这使我们能够在值之后找到正确的收盘价
  2. 直接在 LI 标签内获取字符串
  3. 获取 itemprop 属性的打开引号
  4. 从 span 内部文本中获取数字

例子

这个 PHP 示例只是为了展示正则表达式的工作原理。

<?php
$sourcestring="<li class=\"wx-feels\">
Feels like <i><span class=\"wx-value\" itemprop=\"feels-like-temperature-fahrenheit\">55</span>&deg;</i>
</li>";
preg_match('/<li\b[^>]*\bclass=(["\'])wx-feels\1[^>]*?>(.*?\bitemprop=([\'"])feels-like-temperature-fahrenheit\3[^>]*>(\d+).*?)<\/li>/ims',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
 
$matches Array:
(
    [0] => <li class="wx-feels">
Feels like <i><span class="wx-value" itemprop="feels-like-temperature-fahrenheit">55</span>&deg;</i>
</li>
    [1] => "
    [2] => 
Feels like <i><span class="wx-value" itemprop="feels-like-temperature-fahrenheit">55</span>&deg;</i>

    [3] => "
    [4] => 55
)

免责声明

由于大量的边缘情况,使用正则表达式解析 html 可能会出现问题。如果您可以控制输入文本,或者它始终与您的示例一样基本,那么您应该没有问题。

如果 QT 有,我建议使用 HTML 解析工具来捕获这些数据。

于 2013-06-01T19:31:58.733 回答