免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8494 | 回复: 19
打印 上一主题 下一主题

python re 有没有 php里 preg_replace 这样的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-16 23:41 |只看该作者 |倒序浏览
我想实现两组数对调的效果  ,比如  1对5 2对6  3对7 4对8
php里只需要
$a=array('1','2','3','4');
$b=array('5','6','7','8');
$strnow='1234';
$new=preg_replace($a,$b,$strnow);

new就是5678


但是re.sub肯定是不能这么批量实现的,怎么解决呢?

论坛徽章:
0
2 [报告]
发表于 2010-12-17 13:01 |只看该作者
不知道php,没有用过,但你是要两个list交换的话:
In [1]: a = [1,2,3,4]

In [2]: b = [5,6,7,8]

In [3]: a, b = b, a

In [4]: print a, b
[5, 6, 7, 8] [1, 2, 3, 4]

论坛徽章:
0
3 [报告]
发表于 2010-12-17 13:29 |只看该作者
多replace几次就行了,估计没有类似的函数满足lz需求

论坛徽章:
0
4 [报告]
发表于 2010-12-17 14:07 |只看该作者
解决了

#!/usr/bin/env python
import re

def killher(somestr):
    if somestr.group(0) == '1':
        return '5'
    if somestr.group(0) == '2':
        return '6'
    if somestr.group(0) == '3':
        return '7'
    if somestr.group(0) == '4':
        return '8'

a='abc12x34edf'
b=re.sub('[1-4]',killher,a)
print b

论坛徽章:
0
5 [报告]
发表于 2010-12-17 15:36 |只看该作者
用正则实在有点大材小用
  1. def root(x,y='',dct={'1':'5','2':'6','3':'7','4':'8'}):
  2.             for i in x:
  3.                 if i in dct:
  4.                    y+=dct[i]
  5.                 else:
  6.                    y+=i
  7.             return y
复制代码

论坛徽章:
0
6 [报告]
发表于 2010-12-17 15:56 |只看该作者
本帖最后由 rockyaow 于 2010-12-20 18:30 编辑

回复 5# a515200
字典也是办法

就是你这么循环,字符串只能单独替换,比如 flower  换成 ruby   就不太好搞了

论坛徽章:
0
7 [报告]
发表于 2010-12-17 16:02 |只看该作者
本帖最后由 a515200 于 2010-12-17 16:08 编辑

那么除了正则字典我或许想看一下你还有什么效率高的办法

论坛徽章:
0
8 [报告]
发表于 2010-12-18 12:17 |只看该作者
为啥不直接用字符串里的replace?

论坛徽章:
0
9 [报告]
发表于 2010-12-18 12:57 |只看该作者
本帖最后由 ixuh 于 2010-12-18 14:03 编辑
  1. a = ['1', '2', '3', '4']
  2. b = ['5', '6', '7', '8']
  3. s = '1234'

  4. # method1
  5. import re
  6. print re.sub('.', lambda m: dict(zip(a, b)).get(m.group(), m.group()), s)

  7. # method2
  8. print ''.join(dict(zip(a, b)).get(c, c) for c in s)

  9. #method3
  10. import string
  11. print s.translate(string.maketrans(''.join(a), ''.join(b)))
复制代码

论坛徽章:
0
10 [报告]
发表于 2010-12-18 20:42 |只看该作者
大家都迷上了使用一行的代码来解决问题,看起来又复杂又酷,这些代码如果让新人看到得琢磨一阵子了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP