我有一个这样的字符串:
param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl
我想从上面的字符串中删除任何参数,用户将输入参数名称,如
参数 1、参数 2 等
根据这一点,应该从上面的字符串中删除整个参数及其值。
例如,如果用户想要删除 param3,结果字符串应该如下所示
param1=1234¶m2=abcd¶m4=ijkl
提前致谢,
>>> import re
>>> qs = "param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl"
>>> name = "param2"
>>> rx = '(^|&)' + name + '=[^&]*'
>>> re.sub(rx, '', qs)
'param1=1234¶m3=efgh¶m4=ijkl'
在处理查询字符串时使用专用函数可能会更好:
>>> import urllib, urlparse
>>> qs = "param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl"
>>> qry = urlparse.parse_qs(qs)
>>> del qry['param2']
>>> urllib.urlencode(qry, True)
'param4=ijkl¶m3=efgh¶m1=1234'
这样的事情有用吗?
>>> import re
>>> def removeparam(query, name):
... return re.sub(name + r'=[^&]*(&|$)', '', query).rstrip('&')
...
>>> removeparam('param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl', 'param3')
'param1=1234¶m2=abcd¶m4=ijkl'
我已经针对第一个和最后一个参数对其进行了测试,与其他一些建议的解决方案相比,它似乎对两者都表现良好。
如果您想一次删除多个参数,请将它们放在一个列表中,您可以执行以下操作:
>>> import functools
>>> unwanted = ['param4', 'param1', 'param3']
>>> functools.reduce(removeparam, unwanted,
... 'param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl')
...
'param2=abcd'
您只剩下唯一没有被删除的参数!
使用re.sub()
:
import re
>>> qs = "param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl"
>>> omit = "param3"
>>> re.sub(r'%s=[^&]+&'%omit,'',qs)
'param1=1234¶m2=abcd¶m4=ijkl'