用于多个搜索和代表的正则表达式

2024-10-01 11:27:27 发布

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

我尝试在以下字符串中执行搜索和替换(针对多个字符):

VAR=%2FlkdMu9zkpE8w7UKDOtkkHhJlYZ6CaEaxqmsA%2B7G3e8%3D&

这些字符中的一个或多个:%3D、%2F、%2B、%23可以在任何位置(字符串的开头、中间或结尾)找到,理想情况下,我希望一次搜索所有这些字符(使用一个正则表达式),并分别替换为=或/或+或#,然后返回最后的字符串。在

示例1:

VAR=%2FlkdMu9zkpE8w7UKDOtkkHhJlYZ6CaEaxqmsA%2B7G3e8%3D&

应该回来

VAR=/lkdMu9zkpE8w7UKDOtkkHhJlYZ6CaEaxqmsA+7G3e8=&

例2:

VAR=s2P0n6I%2Flonpj6uCKvYn8PCjp%2F4PUE2TPsltCdmA%3DRQPY%3D&

应该回来

VAR=s2P0n6I/lonpj6uCKvYn8PCjp/4PUE2TPsltCdmA=RQPY=&

Tags: 字符串示例var结尾情况字符理想lonpj6uckvyn8pcjp
3条回答

我也不相信你需要正则表达式,但是有一个更好的方法来用正则表达式进行url解码。基本上,您需要将%XX模式中的每个字符串转换为它所表示的字符。这可以通过re.sub()完成,如下所示:

>>> VAR="%2FlkdMu9zkpE8w7UKDOtkkHhJlYZ6CaEaxqmsA%2B7G3e8%3D&"
>>> re.sub(r'%..', lambda x: chr(int(x.group()[1:], 16)), VAR)
'/lkdMu9zkpE8w7UKDOtkkHhJlYZ6CaEaxqmsA+7G3e8=&'

享受吧。在

我不认为您需要regex来实现这一点,但是使用Python很容易做到:

x = 'VAR=%2FlkdMu9zkpE8w7UKDOtkkHhJlYZ6CaEaxqmsA%2B7G3e8%3D&'

import re

MAPPING = { 
    '%3D': '=',
    '%2F': '/',
    '%2B': '+',
    '%23': '#',
}

def replace(match):
    return MAPPING[match.group(0)]

print x
print re.sub('%[A-Z0-9]{2}', replace, x)

输出:

^{pr2}$

在您的示例中,不需要正则表达式来执行此操作。简单的替换方法可以:

def rep(s):
    for pat, txt in [['%2F','/'], ['%2B','+'], ['%3D','='], ['%23','#']]:
        s = s.replace(pat, txt)
    return s

相关问题 更多 >