0

我有一个这样的字符串:

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

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

参数 1、参数 2 等

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

例如,如果用户想要删除 param3,结果字符串应该如下所示

param1=1234&param2=abcd&param4=ijkl

提前致谢,

4

3 回答 3

2
>>> 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'
于 2013-09-07T08:46:39.813 回答
0

这样的事情有用吗?

>>> 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'

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

于 2013-09-07T08:46:02.313 回答
0

使用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'
于 2013-09-07T08:47:29.163 回答