【问题标题】:Python RegEx Remove / ReplacePython RegEx 删除/替换
【发布时间】:2013-09-07 08:39:07
【问题描述】:

我有一个这样的字符串:

param1=1234&param2=abcd&param3=efgh&param4=ijkl

我想从上面的字符串中删除任何参数,用户将输入参数名称,如

param1、param2 等

根据这一点,应该从上面的字符串中删除整个参数及其值。

例如,如果用户想要删除 param3,结果字符串应该是这样的

param1=1234&param2=abcd&param4=ijkl

提前致谢,

【问题讨论】:

  • 您的字符串看起来很像 URL 查询字符串。您正在处理“操纵 URL”的真正问题是什么?

标签: python replace


【解决方案1】:
>>> import re
>>> qs = "param1=1234&param2=abcd&param3=efgh&param4=ijkl"
>>> name = "param2"
>>> rx = '(^|&)' + name + '=[^&]*'
>>> re.sub(rx, '', qs)
'param1=1234&param3=efgh&param4=ijkl'

在处理查询字符串时使用专用函数可能会更好:

>>> import urllib, urlparse
>>> qs = "param1=1234&param2=abcd&param3=efgh&param4=ijkl"
>>> qry = urlparse.parse_qs(qs)
>>> del qry['param2']
>>> urllib.urlencode(qry, True)
'param4=ijkl&param3=efgh&param1=1234'

【讨论】:

  • +1 这正是我想用我的comment 触发的想法。
【解决方案2】:

使用re.sub():

import re

>>> qs = "param1=1234&param2=abcd&param3=efgh&param4=ijkl"
>>> omit = "param3"
>>> re.sub(r'%s=[^&]+&'%omit,'',qs)
'param1=1234&param2=abcd&param4=ijkl'

【讨论】:

    【解决方案3】:

    这样的东西有用吗?

    >>> import re
    >>> def removeparam(query, name):
    ...     return re.sub(name + r'=[^&]*(&|$)', '', query).rstrip('&')
    ...
    >>> removeparam('param1=1234&param2=abcd&param3=efgh&param4=ijkl', 'param3')
    'param1=1234&param2=abcd&param4=ijkl'
    

    我已经针对第一个参数和最后一个参数对其进行了测试,与其他一些建议的解决方案相比,它似乎对两者都表现良好。


    如果您想一次删除多个参数,请将它们放在一个列表中,您可以执行以下操作:

    >>> import functools
    >>> unwanted = ['param4', 'param1', 'param3']
    >>> functools.reduce(removeparam, unwanted,
    ...     'param1=1234&param2=abcd&param3=efgh&param4=ijkl')
    ...
    'param2=abcd'
    

    剩下的唯一参数没有被删除!

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多