python 正则(re)

python re 模块。
在python docs中,这些内容基本都是成对出现的。但是基本是反义的意思。比如\w 和 \W,\d \D。主要是 \w 和 \W 这两个内容。首先是 \w,这个可以匹配[a-zA-Z_0-9] 这些内容。这些东西正好是组成变量名的元字符。所以我相匹配所有的合法的变量名,那么我可以用这个模式来匹配。 obj = re.compile('\w*'); 这样就可以找到一行代码中的所有的变量名了。然后再用 obj.findall('a+b+c+__c');基本上可以找出一个表达式中所有的变量名了。如果不是用re来完成,这样的任务应该也很麻烦。

* ? + . ^ $ 这几个符号都是很重要很基本的,首先他们是代表什么含义要明白。这些在python docs 中都又很详细的描述,?表示0个或多个,+表示1个或多个。.表示任何符号,^表示字符串的开头,$表示字符串的结尾。问号还可以表示是非贪婪匹配的意思。
targ = '3.23+4.42-16.8877*123'
ob = re.compile('\d+[\.]?\d+')
ob.findall(targ) 可以找出所有的数字。
我感觉 括号的实用还是很诡异的呀,所以不太好搞明白啊。
ss = 'new2012,bay2013'
ob = re.compile('[a-z]*\d*\d')
好好想一下这些是怎么回事。我还是没有搞明白括号的用法。但是从下面这个例子可以说明一些问题。
text = "Professor Abdolmalek, please report your absences promptly."
re.findall(r"(\w)(\w+)(\w)", text)

def repl(m): 
    inner_word = list(m.group(2)) 
    random.shuffle(inner_word) 
    return m.group(1) + "".join(inner_word) + m.group(3)

text = "Professor Abdolmalek, please report your absences promptly."
re.sub(r"(\w)(\w+)(\w)", repl, text)

'Pofsroser Aodlambelk, plasee reoprt yuor asnebces potlmrpy.'

 

下面这个可以找到字符串中长度为2 或 3 的字符串。并且我发现如果不加上r这个字符的话,是得不到正确结果的。r表示raw string 的意思。因为在里面用到了不少的字符,这些都是需要转义才可以正常匹配的,当然这样的话就非常麻烦,加上r之后,就可以避免这些麻烦的转义符了。

下面的例子是找出长度为 1  和长度 为2 的单词。结果就是 he 和 i。

ss = 'new2012,bay2013 he hehehe i sss'
ob = re.compile(r'\b[a-z]{1,2}\b')


基本上就是这样的,具体的可以再参考具体的文档。现在这个模块基本上比较熟悉了。下面的这个例子也比较经典。出了findall之外,finditer也是比较合理的。

text = "He was carefully disguised but captured quickly by police." 
for m in re.finditer(r"\w+ly", text):
    print '%02d-%02d'%(m.start(),m.end(),m.group(0))
这样就可以找到所有的副词了。对于正则,总之需要多练习,才能在工作中比较熟练的使用。多看一些例子还是很有用的,就算是这些特殊字符。比如说 \n \t 之类的,通过正则消除掉没用的空行,这都是很容易做到的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值