这则代码是百度知道里面一个答案,作用是利用python正则表达对字符串中的[]内容进行剔除,输出木有[]内容的字符串。仔细看了看,用到的python内容还不少,dict,group,正则都用上了,对于我这个小菜鸟新手来说要看一看~于是一个个的百度查看吧~import re d = dict() def save(m): l = m.groups() d[l[0]] = l[2] return l[0]+l[1] s='this is a test [error] where we [hahah] can have a talk!' print(s) r = re.sub(r'(\w+)(\s+)\[(\w+)\]', save, s) print(r) print(d)
定义了一个字典,我们暂时不管,貌似是作者要做些演示操作的,之后def了一个函数saved=dict()
这里save函数对形参m进行了一个groups操作,于是就要百度groups()是干嘛的呢?哦,原来groups()是跟着正则表达式一起用的呀,对正则表达式提取内容进行分类存储,我们看下代码:def save(m): l = m.groups() d[l[0]] = l[2] return l[0]+l[1]
r = re.sub(r'(\w+)(\s+)\[.*\]', save, s)
(\w+)=>l[0] //也就是提取出来的整块字母啥的放到m.groups()[0]里面r'(\w+)(\s+)\[.*\]'
这里就是通过查询目标字符串中是否存在a,b,c中的某个,查找到就替换成o。然而我们示例程序中第二个参数是一个函数啊,好吧,再看看是函数的时候是怎么操作的:re.sub('[abc]', 'o', 'rock')
>>>'rook'
但是我们可以看出来哦,这个做法不好的地方,就是替换后多了一个空格,所以代码稍微修改下下:this is a test [error] where we [hahaha] can have a talk! this is a test where we can have a talk! {'test': 'error', 'we': 'hahaha'}
return l[0]
然后看到那个百度知道下面有人留言说[(\w+)]太片面了,改成[.*],那么这样一来其实更简单了做起来,我们对save函数稍作修改就行了:this is a test [error] where we [hahaha] can have a talk! this is a test where we can have a talk! {'test': 'error', 'we': 'hahaha'}
正则表达式那块呢修改下下:def save(m): l = m.groups() return ''
r = re.sub(r'\[.*\]', save, s)
445

被折叠的 条评论
为什么被折叠?



