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

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

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


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】获取更多精彩文章。

目录
相关文章
|
1月前
|
JavaScript 前端开发
扩展正则量词
扩展正则量词
12 1
|
1月前
|
程序员 开发者
为什么强调代码的“可读性”
为什么强调代码的“可读性”
|
7月前
|
Arthas NoSQL 安全
一文聊聊代码的可读性
作者通过本文聊聊自己写代码的要求及代码的可读性。
932 5
|
1月前
|
设计模式 自然语言处理 JavaScript
提高代码可读性的 8 个技巧
编程有很大一部分时间是在阅读代码,不仅要阅读自己的代码,而且要阅读别人的代码。因此,可读性良好的代码能够大大提高编程效率。可读性良好的代码往往会让代码架构更好,因为程序员更愿意去修改这部分代码,而且也更容易修改。只有在核心领域为了效率才可以放弃可读性,否则可读性是第一位。
91 0
|
10月前
|
Java
收藏这36个正则表达式,开发效率提高80%
我们在日常的Java开发中,经常需要处理一些字符串,这个时候正则表达式是非常有用的。几乎在所有的编程语言中都支持正则表达式。以下我将压箱底多年的干货搬出来给大家参考,都是我们日常使用频次比较高的正则表达式,希望能能大大提高你的工作效率。如果本文对大家有帮助,大家可以关注“Tom弹架构”,后续会连载正则表达式的基础知识。
927 1
|
Python
逻辑判断与正则表达式文本处理
逻辑判断与正则表达式文本处理
111 0
逻辑判断与正则表达式文本处理
|
JavaScript 前端开发
【正则表达式】字符串模式匹配,提高开发效率
今天我们来学习正则表达式,正则表达式的应用十分广泛,几乎每个涉及到交互的项目都会用到的,学会正则表达式之后会让你除了提高效率外,会给你带来绝对的成就感。
【正则表达式】字符串模式匹配,提高开发效率
|
Java
正则表达式的 Java语法
正则表达式的 Java语法
103 0
帮你读懂正则表达式
什么是正则表达式?通过正则表达式创建2种方式、正则表达式的组成剖析、几个例子分析来帮你读懂常见正则表达式。
|
JavaScript 前端开发 C++
使用JSDoc提高代码的可读性
工作了四年多,基本上都在围绕着 JavaScript 做事情。 写的代码多了,看的代码也多了,由衷的觉得,写出别人看不懂的代码并不是什么能力,写出所有人都能读懂的代码,才是真的牛X。 众所周知, JavaScript 是一个弱类型的脚本语言,这就意味着,从编辑器中并不能直观的看出这段代码的作用是什么,有些事情只有等到代码真正的运行起来才能够确定。
7408 0