[英]Python RegEx Remove / Replace
我有一个像这样的字符串:
param1=1234¶m2=abcd¶m3=efgh¶m4=ijkl
我想从上面的字符串中删除任何参数,用户将输入参数名称
param1,param2等
依赖于此,应从上面的字符串中删除整个参数及其值。
例如,如果用户想要删除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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.