【问题标题】:Parse out part of URL using regex in Python在 Python 中使用正则表达式解析部分 URL
【发布时间】:2016-08-22 06:59:10
【问题描述】:

我想使用正则表达式操作解析出 URL 的一部分。这可能是个老问题。但是我是正则表达式的新手,并且搜索了很多我的要求但无法找到它。我知道 ParseURL 可以在这里使用。但是我的 URL 结构不正确,无法使用它。假设我的网址如下,

url = https://www.sitename.com/&q=To+Be+Parsed+out&oq=Dont+Need+to+be+parsed

在这里我想找出 &q= 何时发生并解析直到 & 下一次发生。我想删除中间的 + 或任何特殊字符。输出应该是,

To Be Parsed out

如果不匹配,则应返回原始 URL。

我已经尝试了以下,

re.search('q=?([^&]+)&',url).group(0)

返回,

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

谁能帮我分析一下。谢谢

【问题讨论】:

    标签: python regex python-2.7


    【解决方案1】:

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

    re.search(r'/&q=([^&]*)', url).group(1).replace('+', ' ')
    
    • re.search(r'/&q=([^&]*)', url).group(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'
    

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

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

    【讨论】:

    • 这很好用。在某些情况下,当我们找不到模式时,它会抛出错误。 AttributeError:“NoneType”对象没有属性“组”。找不到模式的时候能不能写个条件返回URL?
    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2012-08-23
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多