python正则表达式从字符串中删除特定的sub_string

时间:2018-10-25 13:50:56

标签: regex python-3.x

我想从变量sort_by=<string>中删除所有get_params

get_params将为?sort_by=name&role=user?gender=male&sort_by=name_desc&role=user'?sort_by=name'

我想要这样的输出

我尝试过

re.sub("^sort_by=&*$",r'', get_params)

但无法正常工作。

我在stackoverflow中调查了很多答案,但我做不到

1 个答案:

答案 0 :(得分:2)

您可以使用

[?&]sort_by=[^&]*$|(?<=[?&])sort_by=[^&]*&

替换为空字符串。参见regex demo online

它匹配

  • [?&]-一个?&
  • sort_by=-文字子字符串
  • [^&]*-除&以外的0个字符
  • $-字符串的结尾。
  • |-或
  • (?<=[?&])-以?&开头的位置
  • sort_by=-文字子字符串
  • [^&]*-除&以外的0个字符
  • &-一个&字符。

一个Python demo

key_to_remove = r'sort_by'
rx = r'[?&]{0}=[^&]*$|(?<=[?&]){0}=[^&]*&'.format(key_to_remove)
tests = ['?sort_by=name&role=user','?gender=male&sort_by=name_desc&role=user','?sort_by=name','?age=24&sort_by=fullname&gender=male','?age=24&sort_by=fullname']
for test in tests:
    print(test + " => " + re.sub(rx, "", test))

输出:

?sort_by=name&role=user                  => ?role=user
?gender=male&sort_by=name_desc&role=user => ?gender=male&role=user
?sort_by=name                            => 
?age=24&sort_by=fullname&gender=male     => ?age=24&gender=male
?age=24&sort_by=fullname                 => ?age=24