Python学习-38.Python中的正则表达式(二)

在Python中,正则表达式还有较其他编程语言有特色的地方。那就是支持松散正则表达式了。

在某些情况,正则表达式会写得十分的长,这时候,维护就成问题了。而松散正则表达式就是解决这一问题的办法。

用上一次分组的代码作为例子:

1 import re
2 userinput = input("please input test string:")
3 m = re.match(r'(\d{3,4})-(\d{8})',userinput)
4 if m:
5     print('区号:' + m.group(1))
6     print('号码:' + m.group(2))
7 else:
8     print('格式错误')

现在假设我们离编写该代码隔了很长一段时间了,并不知道\d{3,4}和\d{8}的意义了。

如果一开始就写注释那多好,但我们总不能写

1 # \d{3,4}代表区号,\d{8}代表号码

这样的注释吧。Don't repeat youself。松散正则表达式就用上了。

 1 import re
 2 userinput = input("please input test string:")
 3 regex = r'''
 4    (
 5    \d{3,4} # 区号
 6    )
 7    -       # 区号与号码间的分隔符
 8    (
 9    \d{8}   # 号码
10    )
11 '''
12 m = re.match(regex,userinput,re.VERBOSE)
13 if m:
14     print('区号:' + m.group(1))
15     print('号码:' + m.group(2))
16 else:
17     print('格式错误')

'''代表多行文本(同时也可用作代表文档注释)。

则值得注意的是,现在字符串中多出了很多空白以及注释(尽管他们现在作为字符串的一部分被编译),但运行的效果是一致的。

还有一点要注意的是,在re.match方法的最后,使用了re.VERBOSE参数,这指明当前正则表达式为松散正则表达式。在re.split及其他方法中,若需要使用松散正则表达式,则也需要使用该参数。

posted @ 2014-09-29 21:15  h82258652  阅读(293)  评论(0编辑  收藏  举报