当前位置:首页 > IT科技类资讯

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

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

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 =

: # 开始标志

(.*?) #从开始标志的下一个字符开始的任意字符

, #遇到英文逗号就停止

这样写就清晰多了,每个部分是香港云服务器表达百倍什么作用全都清清楚楚。

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

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

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

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

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

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

| $

)

"""

分享到:

滇ICP备2023006006号-16