一日一技:让你的正则表达式可读性提高一百倍

简介: 一日一技:让你的正则表达式可读性提高一百倍

正则表达式这个东西,强大是强大,但写出来跟个表情符号一样。自己写的表达式,过一个月来看,自己都不记得是什么意思了。比如下面这个:


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 = '''
:  # 开始标志
(.*?)  #从开始标志的下一个字符开始的任意字符
,  #遇到英文逗号就停止
'''


这样写就清晰多了,每个部分是什么作用全都清清楚楚。


但显然直接使用肯定什么都提取不到,如下图所示:


1.png


但我今天在逛Python正则表达式文档[1]的时候,发现了一个好东西:


2.png


使用它,可以让你的正则表达式拥有注释,如下图所示:


3.png


re.VERBOSE也可以简称为re.X,如下图所示:


4.png


本文最开头的复杂正则表达式,使用了注释以后,就会变得更可读:


pattern = r"""
(                       # code (capture)
    # BEGIN multicode
    (?: \( \s* )?       # maybe open paren and maybe space
    # code
    [A-Z]*H  # prefix
    \d+      # digits
    [a-z]*   # suffix
    (?:                 # maybe followed by other codes,
        \s* \+ \s*      # ... plus-separated
        # code
        [A-Z]*H  # prefix
        \d+      # digits
        [a-z]*   # suffix
    )*
    (?: \s* [\):+] )?   # maybe space and maybe close paren or colon or plus
    # END multicode
)
( .*? )                 # message (capture): everything ...
(?=                     # ... up to (but excluding) ...
    # ... the next code
    # BEGIN multicode
    (?: \( \s* )?       # maybe open paren and maybe space
    # code
    [A-Z]*H  # prefix
    \d+      # digits
    [a-z]*   # suffix
    (?:                 # maybe followed by other codes,
        \s* \+ \s*      # ... plus-separated
        # code
        [A-Z]*H  # prefix
        \d+      # digits
        [a-z]*   # suffix
    )*
    (?: \s* [\):+] )?   # maybe space and maybe close paren or colon or plus
    # END multicode
        # (but not when followed by punctuation)
        (?! [^\w\s] )
    # ... or the end
    | $
)
"""


参考资料


[1] 正则表达式文档: https://docs.python.org/3/library/re.html#re.VERBOSE



请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
8月前
|
Shell Linux
熟练使用正则表达式(1)
熟练使用正则表达式。
52 2
|
2月前
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
76 4
|
4月前
|
前端开发 C#
C# 一分钟浅谈:字符串操作与正则表达式
本文详细介绍C#中的字符串操作与正则表达式应用,涵盖字符串拼接、分割、查找及替换等基础操作,并通过实例讲解正则表达式的模式匹配、文本替换与分组捕获技巧。同时,文章还探讨了性能优化、复杂度管理和安全性等问题及解决策略,助你提升编程效率,应对实际开发挑战。
89 0
|
7月前
|
程序员
程序员必知:常用正则表达式
程序员必知:常用正则表达式
34 0
|
7月前
部分循环语句书写格式
部分循环语句书写格式
|
8月前
|
Shell
熟练使用正则表达式(2)
熟练使用正则表达式。
46 2
 熟练使用正则表达式(2)
|
Java
收藏这36个正则表达式,开发效率提高80%
我们在日常的Java开发中,经常需要处理一些字符串,这个时候正则表达式是非常有用的。几乎在所有的编程语言中都支持正则表达式。以下我将压箱底多年的干货搬出来给大家参考,都是我们日常使用频次比较高的正则表达式,希望能能大大提高你的工作效率。如果本文对大家有帮助,大家可以关注“Tom弹架构”,后续会连载正则表达式的基础知识。
1114 1
|
Python
逻辑判断与正则表达式文本处理
逻辑判断与正则表达式文本处理
137 0
逻辑判断与正则表达式文本处理
|
数据采集 安全 数据处理
正则表达式对字符串处理
正则表达式对字符串处理
124 0
正则表达式对字符串处理