如何获取HTML标签之间的数字

时间:2018-07-31 02:33:01

标签: php regex

我想在html标签之间得到一些数字。我在html标签之间得到了所有东西,但我只需要数字。我想将它们存储为数据库中的整数。

示例HTML代码:

import itertools
import pandas as pd
import numpy as np

# get all of the xy pairs
xys = pd.DataFrame(list(itertools.product(range(size[0]), range(size[1]))))

# calculate distance
xys["distance"] = np.sqrt((xys[0] - center[0]) ** 2 + (xys[1] - center[1]) ** 2)

# transform to a 2d array
img = xys.set_index([0, 1])["distance"].unstack()

# if you want just the Numpy array, not a Pandas DataFrame
img.values

此模式为我提供了<div class="col-md-3 product-c"><span title="how many x product left"> 4 left</div> $pattern = <div class="col-md-3 product-c"><span (?:.*?)>(.*?)</div> ,但我只想获取4 left(或其他数字),因此我在下面的示例中尝试了此操作:

4

但是这次,它什么也不返回,只是一个空数组。

如何才能在这些标签之间仅获取数字?

2 个答案:

答案 0 :(得分:2)

有两个问题:

  • 您没有输入的数字前有空格
  • 您没有输入的数字后面有文字和空格

这取决于您要指定的确切条件,但这将起作用:

<div class="col-md-3 product-c"><span (?:.*?)>(?:\s*)([0-9]+)(?:[^0-9]*)<\/div>
  • (?:.*?)会忽略<span>属性中可能包含的所有内容
  • (?:\s*)忽略数字前的空格
  • ([0-9]+)将数字本身分组
  • (?:[^0-9]*)忽略数字后的任何内容

这可以在 here 上看到。

话虽如此,您不妨考虑使用HTML解析器。

答案 1 :(得分:1)

我认为使用解析器将是最好的方法。一旦有了正确的值(通过解析为span并检查title),就可以将其强制转换为int,它将是所需的值。

$html = '<div class="col-md-3 product-c"><span title="how many x product left"> 4 left</div>';
$dom = new domdocument();
$dom->loadhtml($html);
$spans = $dom->getelementsbytagname('span');
foreach($spans as $span) {
    if($span->getattribute('title') == 'how many x product left') {
        echo (int)$span->nodeValue;
    }
}