Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从包含其他标记的html标记中提取文本?正则表达式_Php_Python_Html_Regex - Fatal编程技术网

Php 如何从包含其他标记的html标记中提取文本?正则表达式

Php 如何从包含其他标记的html标记中提取文本?正则表达式,php,python,html,regex,Php,Python,Html,Regex,我有以下html文本: <span id="target_text"> sample text <span class="red"> word1 </span> <span class="green"> <b> word2 </b> word3 </span> <b> word4 </b> <

我有以下html文本:

<span id="target_text"> 
         sample text
         <span class="red"> word1 </span>
         <span class="green"> <b> word2 </b> word3 </span>
         <b> word4 </b>
         <span> word5 </span>
         <b> word6 </b>
         <a class="itlink" href="http:www.example.com" > Details </a>
</span>
注意:我不知道目标_文本中有多少b或span标记

我试过这样的表达:

preg_match_all ( "%target_text.*?>(.*?<.*?>.*?<.*?>.*?)</span>%s", $html_text, $out, PREG_PATTERN_ORDER );
preg_match_all(“%target_text.*?”>(.*?*?.*?!%s)、$html_text、$out、preg_PATTERN_ORDER);

它首先定位span target_文本,然后获取
之间不使用正则表达式解析HTML的所有内容。永远

了解它们是什么,你的生活就会更好(XPath可以用多种语言)。Python已经内置了一个库,在您的示例中可以很好地使用它,但它是一个更好的库(具有一个基本兼容的接口)


普雷斯托

你真的不能用正则表达式来解析HTML…XML解析器通常是正则表达式的一个很好的替代品,根据我的经验,我不会说你不能,更重要的是,你不应该说。使用、等。这些只是更好的方式。相信我相信你的答案。实际上,我没有xpath查询的经验。你的查询没有返回“示例文本”@david我已经更新了它。
preg_match_all ( "%target_text.*?>(.*?<.*?>.*?<.*?>.*?)</span>%s", $html_text, $out, PREG_PATTERN_ORDER );
In [1]: import lxml.html

In [2]: html = lxml.html.fromstring("""<span id="target_text">
   ...:          sample text
   ...:          <span class="red"> word1 </span>
   ...:          <span class="green"> <b> word2 </b> word3 </span>
   ...:          <b> word4 </b>
   ...:          <span> word5 </span>
   ...:          <b> word6 </b>
   ...:          <a class="itlink" href="http:www.example.com" > Details </a>
   ...: </span>""")

In [3]: html.xpath('//span[@id="target_text"]')[0].text_content()
Out[3]:' \n         sample text\n          word1 \n           word2  word3 \n          word4 \n          word5 \n          word6 \n          Details \n'
In [9]: content = html.xpath('//span[@id="target_text"]')[0].text_content()
In [10]: import re
In [11]: re.sub('\s+', ' ', content).strip()
Out[11]: 'sample text word1 word2 word3 word4 word5 word6 Details'