繁体   English   中英

Python RegEx删除/替换

[英]Python RegEx Remove / Replace

我有一个像这样的字符串:

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

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

param1,param2等

依赖于此,应从上面的字符串中删除整个参数及其值。

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

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'

这样的事情有用吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM