有人问,python有没有函数,能将一个字符串中的所有re转义符转换成普通字符。具体例子如:
s = r'[abc\]abcmn(abc)'
s1=r'[abc\]'
s2='(abc)'
想使用正则表达式,从s中查找出'abcmn’。
我对正则表达式不是很熟悉,也不清楚python中有没有这函数,只知道[]在re中的作用,于是写了下面一函数:
re_wrap = lambda s: ''.join(map(lambda x:'[%s]'%x if not x in [']', '\\'] else r'[\%s]' % x, s))
这个函数的目的,就是用[]将可能包含有转义字符的字符串中所有字符包裹起来,如:
>>> re_wrap(s1)
'[[][a][b][c][\\\\][\\]]'
简单测试下这个函数:
import re
s = r'[abc\]abcmn(abc)'
s1=r'[abc\]'
s2='(abc)'
re_wrap = lambda s: ''.join(map(lambda x:'[%s]'%x if not x in [']', '\\'] else r'[\%s]' % x, s))
rs = '%s(.+?)%s' % (re_wrap(s1), re_wrap(s2))
r=re.compile(rs) # s1+'(.+?)'+s2)
d = r.findall(s)
print d
也能得到需要的结果:d =['abcmn']
后来,发现有现成函数:re.escape