Python 如何在通过BeautifulSoup提取后通过正则表达式运行属性值?

Python 如何在通过BeautifulSoup提取后通过正则表达式运行属性值?,python,regex,url,unicode,beautifulsoup,Python,Regex,Url,Unicode,Beautifulsoup,我有一个要解析其中一部分的URL,特别是widgetid: <a href="http://www.somesite.com/process.asp?widgetid=4530">Widgets Rock!</a> 我已经编写了这个Python(我是Python的新手,版本是2.7): 重新导入 从bs4导入BeautifulSoup doc=open('c:\Python27\some\u xml\u file.txt') 汤=美汤(doc) links=soup

我有一个要解析其中一部分的URL,特别是widgetid:

<a href="http://www.somesite.com/process.asp?widgetid=4530">Widgets Rock!</a>

我已经编写了这个Python(我是Python的新手,版本是2.7):

重新导入
从bs4导入BeautifulSoup
doc=open('c:\Python27\some\u xml\u file.txt')
汤=美汤(doc)
links=soup.findAll('a')
#调试语句
打印类型(链接[7])
#输出:
打印链接[7]
#输出:
URL=链接[7]。属性['href']
打印URL
#输出:http://www.somesite.com/process.asp?widgetid=4530
打印类型(URL)
#输出:
是_widget_url=re.compile(“[0-9]”)
打印是\u widget\u url.match(url)
#输出:无(我知道这不是正确的正则表达式,但我认为它是正确的
#如果里面有任何数字,就会匹配!)
我认为我缺少正则表达式(或者我对如何使用它们的理解),但我无法理解它

谢谢你的帮助

使用:


这个问题与BeautifulSoup无关

问题是,
match
只在字符串的开头匹配。由于要查找的数字位于字符串的末尾,因此它不返回任何内容

要在任意位置匹配某个数字,请使用
搜索
——您可能希望使用
\d
实体进行数字匹配

matches = re.search(r'\d+', theURL)

我不认为你想要一个再培训,你可能想要:

from urlparse import urlparse, parse_qs
s = 'http://www.somesite.com/process.asp?widgetid=4530'
qs = parse_qs(urlparse(s).query)
if 'widgetid' in qs:
   # it's got a widget, a widget it has got...

非常感谢你。这让我难堪了好一阵子!不要为此使用
re
,使用
urlparse
@Tichodroma,这是因为效率(使用urlparse而不是regex)?不,因为Python来了。谢谢。我想regex是我最喜欢的解析工具。之所以建议使用
urlparse
,是因为它已经解决了查询字符串解析逻辑——例如,如果你得到一个包含更多参数的URL,它仍然可以工作。
matches = re.search(r'\d+', theURL)
from urlparse import urlparse, parse_qs
s = 'http://www.somesite.com/process.asp?widgetid=4530'
qs = parse_qs(urlparse(s).query)
if 'widgetid' in qs:
   # it's got a widget, a widget it has got...