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及其他方法中,若需要使用松散正则表达式,则也需要使用该参数。