【问题标题】:Python- regular expression to print word within linkPython-正则表达式在链接中打印单词
【发布时间】:2016-11-11 22:09:17
【问题描述】:
我正在使用 Jupyter Notebook 使用 reg ex 获取 docid=PE209374738 作为我的输出。它目前以这种格式存储在字典中:
{'Url': 'https://backtoschool.com/document.php?docid=PE209374738&datasource=PHE&vid=3326&referrer=api'}。
这是我的代码:
results= xmldoc.getElementsByTagName("result")
dict= {}
for a in results:
url= 'Url'
dict[url] = a.getElementsByTagName("url")[0].childNodes[0].nodeValue
docid= re.search(r'\?(.*?)&')
有人对如何打印该 ID 有任何建议吗?
【问题讨论】:
标签:
python
regex
dictionary
jupyter-notebook
【解决方案1】:
标准库已经有了正确解析 URL 的方法,不需要正则表达式。
在 Python 3 中:
from urllib.parse import urlparse, parse_qs
url = 'https://backtoschool.com/document.php?docid=PE209374738&datasource=PHE&vid=3326&referrer=api'
print(parse_qs(urlparse(url).query)['docid'][0]) # PE209374738
在 Python 2 中,第一行是:
from urlparse import urlparse, parse_qs
【解决方案2】:
@alex-hall 是正确的,您最好使用适当的 URL 解析器来解析它。
也就是说,您最初的问题是关于使用正则表达式,所以这里是解决方案(您几乎已经确定):
s = 'https://backtoschool.com/document.php?docid=PE209374738&datasource=PHE&vid=3326&referrer=api'
m = re.search(r'\?docid=(.*?)&', s)
print m.groups()[0]
这将打印所需的PE209374738。