当前位置: 首页 > 科技观察

一天一技能:将你的正则表达式的可读性提高一百倍_0

时间:2023-03-12 10:59:40 科技观察

正则表达式很强大,但写起来像表情符号。我写的这个表情,过了一个月,我不记得是什么意思了。例如,以下内容:pattern=r"((?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]]*)*(?:\s*[\):+])?)(.*?)(?=(?:\(\s*)?[A-Z]*H\d+[a-z]*(?:\s*\+\s*[A-Z]*H\d+[a-z]*)*(?:\s*[\):+])?(?![^\w\s])|$)"有没有办法提高正则表达式的可读性?我们知道提高代码可读性的方法之一就是写注释,那么正则表达式可以写注释吗?比如下面这句话:msg='我叫庆南,我的密码是:123kingname456,请保密。'我要提取密码123kingname456,所以我的正则表达式可能是这样的:pattern=':(.*?),'我可以这样写吗:pattern=''':#Startsign(.*?)#从起始符的下一个字符开始的任意一个字符,#遇到英文逗号就停止'''这样就清楚多了,各部分的作用也一目了然。但是很明显什么都不能直接提取出来,如下图:但是今天在浏览Python正则表达式文档的时候,发现了一个好东西:使用它,可以让你的正则表达式带有注释,如图如下所示:re.VERBOSE也可以简称为re.X,如下图所示:本文开头的复杂正则表达式在使用注释后会变得更加可读:pattern=r"""(#code(capture)#BEGINmulticode(?:\(\s*)?#maybeopenparenandmaybespace#code[A-Z]*H#prefix\d+#digits[a-z]*#suffix(?:#maybefollowed)通过其他代码,\s*\+\s*#...加号分隔#code[A-Z]*H#prefix\d+#digits[a-z]*#suffix)*(?:\s*[\):+])?#可能是空格,可能是右括号或冒号或加号#ENDmulticode)(.*?)#消息(捕获):一切...(?=#...直到(但不包括)...#...下一个代码#BEGINmulticode(?:\(\s*)?#可能是开括号,可能是空格#code[A-Z]*H#prefix\d+#digits[a-z]*#suffix(?:#maybefollow欠其他代码,\s*\+\s*#...加号分隔#code[A-Z]*H#prefix\d+#digits[a-z]*#suffix)*(?:\s*[\):+])?#可能是空格,也可能是右括号或冒号或加号#ENDmulticode#(但不是后跟标点符号时)(?![^\w\s])#...或结尾|$)"""