【问题标题】:Problems with regex matching正则表达式匹配问题
【发布时间】:2011-07-17 13:03:58
【问题描述】:

我目前正在学习 Python,我正在尝试制作一个小型刮刀,但我遇到了 Beautiful Soup 和正则表达式的问题。

我正在尝试匹配具有以下 html 的站点中的所有链接:

<td>
    <a href="/l1234/Place+Number+1">Place Number 1 </a>
</td>
<td width="100">
    California  </td>
<td>
    <a href="/l2342/Place+Number+2">Place Number 2 </a>
</td>
<td width="100">
    Florida </td>

我想获取以下所有链接:“/lxxxx/Place+Number+x”

我正在为此使用 python 和 beautifulsoup:

import BeautifulSoup
import urllib2
import re

address = 'http://www.example.com'

html = urllib2.urlopen(address).read()

soup = BeautifulSoup(html)

for tag in soup.findAll('a', id = re.compile('l[0-9]*')):
    print tag['href']

我在一些示例代码中找到了 soup.findAll 中的正则表达式部分,因为我似乎无法从 BeautifulSoup 文档中获取示例。没有正则表达式部分,我得到了页面上的所有链接,但我只想要“lxxx”的

我的正则表达式有什么问题?也许有一种方法可以不使用正则表达式,但我似乎找不到方法。

【问题讨论】:

  • 您在哪里看到 id = lXXX?这是关于href!
  • 感谢您使用 html 解析器 上帝今天看到您的帖子时创造了一只小猫。尝试匹配 href 而不是 id!
  • 啊,是的,我不确定我找到的代码示例中的那部分。谢谢!

标签: python regex beautifulsoup


【解决方案1】:

您不应该尝试在href 而不是id 上进行正则表达式匹配吗?

for tag in soup.findAll('a', href = re.compile('l[0-9]*')):
    print tag['href']

【讨论】:

  • 啊,是的,我不确定我找到的代码示例中的那部分,BSoup 文档对此也不是很清楚。但它现在也匹配这些链接:listado.php?mrdstartid=20&alpha=yes&l=A(为什么我不能在回复框中输入换行符??我按回车,它会发布回复!)
  • @user664698:IIRC Shift-Enter 将在评论中执行您想要的操作。
  • @user 您不能在 cmets 中进行换行,如果您将 * 更改为 +,它将需要正则表达式中 l 之后的数字
【解决方案2】:

除了检查href not id

re.compile(r'^\/l[0-9]{4}/Place\+Number\+[0-9]+')

match 似乎假设您的正则表达式以“^”开头。

>>> m = re.compile(r"abc")
>>> m.match("eabc")
>>> m.match("abcd")
<_sre.SRE_Match object at 0x7f23192318b8>

所以添加 \/ 可以匹配第一个斜杠。此外,我使用 {4} 匹配四个数字,而不是 * 匹配零个或多个数字。

>>> m = re.compile(r'\/l[0-9]*')
>>> m.match("/longurl/somewhere")
<_sre.SRE_Match object at 0x7f2319231850>

【讨论】:

  • 是的,{4} 绝对比 * 好。您也可以使用 \d 代替 [0-9]。
【解决方案3】:

建议

for tag in soup.findAll('a', href = re.compile('^/l[0-9]+/.*$')):
    print tag['href']

为了避免标签看起来像但不完全是你的样子

【讨论】:

  • 太棒了,过滤掉了之前正则表达式匹配的其他链接。现在我只需要真正理解正则表达式呵呵。
猜你喜欢
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多