在Python中使用正则表达式解析URL的一部分

在Python中使用正则表达式解析URL的一部分,python,regex,python-2.7,Python,Regex,Python 2.7,我想使用正则表达式操作解析出URL的一部分。这可能是个老问题。但我对regex是新手,搜索了这么多我的需求,却没能找到它。我知道这里可以使用ParseURL。但是我的URL没有正确的结构来使用它。假设我的URL如下所示 url = https://www.sitename.com/&q=To+Be+Parsed+out&oq=Dont+Need+to+be+parsed 在这里,我想找出&q=发生的时间,并解析出来,直到下一个&q=发生。我想删除+或任何特殊字符在中间。输出应该

我想使用正则表达式操作解析出URL的一部分。这可能是个老问题。但我对regex是新手,搜索了这么多我的需求,却没能找到它。我知道这里可以使用ParseURL。但是我的URL没有正确的结构来使用它。假设我的URL如下所示

url = https://www.sitename.com/&q=To+Be+Parsed+out&oq=Dont+Need+to+be+parsed
在这里,我想找出&q=发生的时间,并解析出来,直到下一个&q=发生。我想删除+或任何特殊字符在中间。输出应该是,

To Be Parsed out
此外,如果没有匹配项,则应返回原始URL

我试过以下方法

re.search('q=?([^&]+)&',url).group(0)
这就回来了,

&q=To+Be+Parsed+out&oq=Dont+Need+to+be+parsed

有人能帮我把这个解析出来吗。谢谢

您可以使用
re.search()
获取所需的子字符串,然后将所有
+
替换为带
str.replace()
的空格:

  • re.search(r'/&q=([^&]*),url)。组(1)
    获取所需的部分,并
    replace(+','')
    执行重播
示例:

In [56]: url
Out[56]: 'https://www.sitename.com/&q=To+Be+Parsed+out&oq=Dont+Need+to+be+parsed'

In [57]: re.search(r'/&q=([^&]*)', url).group(1).replace('+', ' ')
Out[57]: 'To Be Parsed out'

如果没有匹配项,则捕获由
re.search.group()
引发的
AttributeError
异常,例如:

try:
    out = re.search(r'/&q=([^&]*)', url).group(1).replace('+', ' ')
except AttributeError:
    ## No match, do what you want

您可以使用
re.search()

  • re.search(r'/&q=([^&]*),url)。组(1)
    获取所需的部分,并
    replace(+','')
    执行重播
示例:

In [56]: url
Out[56]: 'https://www.sitename.com/&q=To+Be+Parsed+out&oq=Dont+Need+to+be+parsed'

In [57]: re.search(r'/&q=([^&]*)', url).group(1).replace('+', ' ')
Out[57]: 'To Be Parsed out'

如果没有匹配项,则捕获由
re.search.group()
引发的
AttributeError
异常,例如:

try:
    out = re.search(r'/&q=([^&]*)', url).group(1).replace('+', ' ')
except AttributeError:
    ## No match, do what you want

这个很好用。在某些情况下,当我们找不到模式时,它会抛出一个错误。AttributeError:“非类型”对象没有属性“组”。当我们找不到模式时,我们可以写一个返回URL的条件吗?这很好。在某些情况下,当我们找不到模式时,它会抛出一个错误。AttributeError:“非类型”对象没有属性“组”。当我们找不到模式时,是否可以编写一个返回URL的条件?