首页 新闻 会员 周边

python正则怎么把匹配到的字符加上点什么

0
[待解决问题]

比如"a><=bnj",怎么用正则变成"a1>11<1=1bnj"就是如果匹配到>或<或+就在左右加个1

DoubleT的主页 DoubleT | 菜鸟二级 | 园豆:204
提问于:2017-07-27 16:04
< >
分享
所有回答(3)
0
按照条件>或<或+就在左右加个1,等于号也各加一个,得到的结果是下面的;如果只是>,<,+,可以在我下面的代码用if直接判断;
a1>11<11=1bnj
 
strinfo = 'a><=bnj'

def strfun(x):
    #非字母  如果只是>,<,+,可以在此处用if直接判断;
    if x.isalpha() != True:
        return '1{0}1'.format(x)
    else:
        return x

m = map(strfun, list(strinfo))

print(''.join(list(m)))

 

 
悟行 | 园豆:12559 (专家六级) | 2017-07-27 16:53

。。我就是想用正则写的简单点

支持(0) 反对(0) DoubleT | 园豆:204 (菜鸟二级) | 2017-07-27 16:55

@DoubleT: isalpha() 函数可以直接判断是字母还是非字母

支持(0) 反对(0) 悟行 | 园豆:12559 (专家六级) | 2017-07-27 16:56
0

既然匹配到了,用 re.sub() 替换下应该可以吧~

木木卡卡西 | 园豆:208 (菜鸟二级) | 2017-10-05 10:08
1

采用引用分组替换的方式就可以了。
如果非要替换数字,那么可以采用命名分组或者用一个函数返回替换。

直接用\数字引用分组也可以。不冲突的情况下。

以下是4种实现方法我全写了。

import re

test = "a><=bnj"
result = re.sub("(<|>|=)", r"#\1#", test)
print(result)


result = re.sub("(?P<py交易>[<>=])", "1\g<py交易>1", test)
print(result)


def py交易(matchobj):
    return "1" + matchobj.group(1) + "1"

result = re.sub("([<>=])", py交易, test)
print(result)


py交易 = lambda matchobj: "1" + matchobj.group(1) + "1"

result = re.sub("([<>=])", py交易, test)
print(result)
墨镜带佬星 | 园豆:2294 (老鸟四级) | 2017-12-13 07:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册