Python正则表达式Remove/Rep

2024-04-25 08:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一根线:

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

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

param1、param2等

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

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

param1=1234&param2=abcd&param4=ijkl

提前谢谢


Tags: 字符串用户名称参数param1abcdparam2efgh
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'

只剩下一个参数没有被删除

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

相关问题 更多 >