有没有什么办法提高正则表达式的可读性呢?我们知道,提高代码可读性的方法之一就是写注释,那么正则表达式能不能写注释呢?
正则表达式这个东西,强大是强大,但写出来跟个表情符号一样。自己写的表达式,过一个月来看,自己都不记得是什么意思了。比如下面这个:
复制
1. 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])|$)"
有没有什么办法提高正则表达式的可读性呢?我们知道,提高代码可读性的方法之一就是写注释,那么正则表达式能不能写注释呢?
例如对于下面这个句子:
复制
1. msg = '我叫青南,我的密码是:123kingname456,请注意保密。'
我要提取其中的密码123kingname456,那么我的正则表达式可能是这样的:
复制
1. pattern = ':(.*?),'
我能不能把它写成这样:
复制
1. pattern = '''
2. : # 开始标志
3. (.*?) #从开始标志的下一个字符开始的任意字符
4. , #遇到英文逗号就停止
5. '''
这样写就清晰多了,每个部分是什么作用全都清清楚楚。
但显然直接使用肯定什么都提取不到,如下图所示:
但我今天在逛Python正则表达式文档的时候,发现了一个好东西:
使用它,可以让你的正则表达式拥有注释,如下图所示:
re.VERBOSE也可以简称为re.X,如下图所示:
本文最开头的复杂正则表达式,使用了注释以后,就会变得更可读:
复制
1. pattern = r"""
2. ( # code (capture)
3. # BEGIN multicode
4.
5. (?: \\( \\s* )? # maybe open paren and maybe space
6.
7. # code
8. [A-Z]*H # prefix
9. \\d+ # digits
10. [a-z]* # suffix
11.
12. (?: # maybe followed by other codes,
13. \\s* \\+ \\s* # ... plus-separated
14.
15. # code
16. [A-Z]*H # prefix
17. \\d+ # digits
18. [a-z]* # suffix
19. )*
20.
21. (?: \\s* [\\):+] )? # maybe space and maybe close paren or colon or plus
22.
23. # END multicode
24. )
25.
26. ( .*? ) # message (capture): everything ...
27.
28. (?= # ... up to (but excluding) ...
29. # ... the next code
30.
31. # BEGIN multicode
32.
33. (?: \\( \\s* )? # maybe open paren and maybe space
34.
35. # code
36. [A-Z]*H # prefix
37. \\d+ # digits
38. [a-z]* # suffix
39.
40. (?: # maybe followed by other codes,
41. \\s* \\+ \\s* # ... plus-separated
42.
43. # code
44. [A-Z]*H # prefix
45. \\d+ # digits
46. [a-z]* # suffix
47. )*
48.
49. (?: \\s* [\\):+] )? # maybe space and maybe close paren or colon or plus
50.
51. # END multicode
52.
53. # (but not when followed by punctuation)
54. (?! [^\\w\\s] )
55.
56. # ... or the end
57. | $
58. )
59. """
来源: 未闻Code
>>>>>>点击进入编程语言专题
上一篇:聊聊一个注解实现接口重试
¥99.00
¥680.00
¥68.00
¥280.00