Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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
Python 如何使用正则表达式从HTML网页中提取信息?_Python_Html_Regex - Fatal编程技术网

Python 如何使用正则表达式从HTML网页中提取信息?

Python 如何使用正则表达式从HTML网页中提取信息?,python,html,regex,Python,Html,Regex,如何使用正则表达式从这样的HTML网页中提取答案“这里是答案” <b>Last Question:</b> <b>Here is the answer</b> 最后一个问题: 这是答案 不要使用正则表达式解析HTML。如果您使用的不是格式良好的SGML/XML/HTML5,而是标记汤,则会加倍。使用HTML解析器,如 String html=“最后一个问题:这是答案”; documentdocument=Jsoup.parse(html)

如何使用正则表达式从这样的HTML网页中提取答案“这里是答案”

  <b>Last Question:</b>
  <b>Here is the answer</b>
最后一个问题:
这是答案

不要使用正则表达式解析HTML。如果您使用的不是格式良好的SGML/XML/HTML5,而是标记汤,则会加倍。使用HTML解析器,如

String html=“最后一个问题:这是答案”;
documentdocument=Jsoup.parse(html);
元素secondBold=文档。选择(“b”)。获取(1);
System.out.println(secondBold.text());//这是答案

Jsoup是基于Java的。对于其他编程语言,也可以使用HTML解析器。如果您使用的是C#,请查看。如果您使用的是PHP,请看一看(所有这些解析器都使用类似CSS3的选择器来选择元素,这简直太棒了)。

正如Charles所说,不要为此使用正则表达式;如果您使用的是PHP,我建议您使用内置的DOM解析功能,再加上XPath方法,这证明是非常可靠的


如果你比这更开放的话,我建议你使用jQuery通过Node.js来完成这项工作,我最近也做了很多,这让生活变得简单。

我知道不建议使用正则表达式来解析html,而是回答你的问题, 如果您正在使用php,simplehtmldom就是您的朋友

谢谢大家

由于我使用的是Python框架,下面是我使用BeautifulSoup的解决方案:

  response = opener.open(url)
  the_page = response.read()

  soup = BeautifulSoup(''.join(the_page))
  paraText1 = soup.body.find('div', 'div_id', text = u'Last Question:')

  if paraText1:
    answer = paraText1.next
最后一个问题:\\s*(*?)
或者,更详细地说

String x  ="<b>Last Question:</b>\n<b>Here is the answer</b>";
Pattern p = Pattern.compile("<b>Last Question:</b>\\s*(<b>.*?</b>)");
Matcher m = p.matcher(x);
if (m.find())
   System.out.println(m.group(1));
String x=“最后一个问题:\n答案是什么”;
模式p=Pattern.compile(“最后一个问题:\\s*(.*)”;
匹配器m=p.Matcher(x);
if(m.find())
系统输出println(m.group(1));

当HTML或类似标记不存在或随机出现,而没有提供足够的上下文信息时,正则表达式仍然是一种选择。在这种情况下,我们需要研究人类语言中的一些词汇

“最后一个问题:答案在这里”中的HTML在哪里?你用什么编程语言实现正则表达式?相关:现在是2011年,这种问题仍然会再次出现..*唉*这很容易用正则表达式实现。
<b>Last Question:</b>\\s*(<b>.*?</b>)
String x  ="<b>Last Question:</b>\n<b>Here is the answer</b>";
Pattern p = Pattern.compile("<b>Last Question:</b>\\s*(<b>.*?</b>)");
Matcher m = p.matcher(x);
if (m.find())
   System.out.println(m.group(1));