正则表达式很好用,但是却很难阅读和创建。有没有办法可以轻松地编写更可读的正则呢?Python的包Pregex就解决了这个问题。
Pregex是一个Python软件包,可让以更友好的方式构建正则表达式。
要安装Pregex,请输入:
pip install pregex
那么它有什么功能呢,我们用几个例子来解释:
首先将尝试使用Pregex在文本中获取URL。
from pregex.classes import AnyButWhitespace
from pregex.quantifiers import AtLeastOnce
from pregex.operators import Either
text = "You can find me through GitHub https://www.overfit.cn"
pre = (
"https://"
+ AtLeastOnce(AnyButWhitespace())
+ Either(".com", ".cn")
+ AtLeastOnce(AnyButWhitespace())
)
输出
['https://www.overfit.cn']
在上面的代码中,我们使用:
具体来说,
Atleastonce(AnyButWhitespace())匹配一个或多个不是白空间字符的字符。Either(“.com”,“ .cn“ )匹配“.com”,“ .cn“ 中的一个。
如果需要增加https和http的判断则需要改成如下形式:
from pregex.quantifiers import Optional
pre = (
"http"
+ Optional("s")
+ "://"
+ AtLeastOnce(AnyButWhitespace())
+ Either(".com", ".cn")
+ AtLeastOnce(AnyButWhitespace())
)
pre.get_matches(text)
通过使用Optional()使字符串s变为可选项
也可以使用pre.get_pattern()
方法获取输出的正则表达式
如果需要获取时间,可以使用AnyDigit()匹配任何数字字符。让可以用它来匹配文本中的时间。
from pregex.classes import AnyDigit
text = "It is 6:00 pm now"
pre = AnyDigit() + ":" + AnyDigit()
pre.get_matches(text)
结果如下:
['6:0']
现在通过将Addleastonce()和AnyDigit()一起使用:
pre = AtLeastOnce(AnyDigit()) + : + AtLeastOnce(AnyDigit())
pre.get_matches(text)
结果如下:
['6:00']
获取电话号码也是一样的,电话号码的通用格式:
##########
###-###-####
### ### ####
###.###.####
可以使用AnyFrom("-", " ", ".")匹配两者 - 。,或空。然后使用Optional()。
text = "My phone number is 3452352312 or 345-235-2312 or 345 235 2312 or 345.235.2312"
punctuation = AnyFrom("-", " ", ".")
optional_punctuation = Optional(punctuation)
at_least_one_digit = AtLeastOnce(AnyDigit())
pre = (
at_least_one_digit
+ optional_punctuation
+ at_least_one_digit
+ optional_punctuation
+ at_least_one_digit
)
pre.get_matches(text)
['3452352312', '345-235-2312', '345 235 2312', '345.235.2312']
这里有点复杂,用图表看下:
获取邮件地址:
pre = (
AtLeastOnce(AnyButWhitespace())
+ "@"
+ AtLeastOnce(AnyButWhitespace())
+ Either(".com", ".org", ".io", ".net")
)
这样通过代码就可以简单的生成正则表达式,非常方便
如果你对pregex感兴趣 官网的地址如下:
https://pregex.readthedocs.io/en/latest/docstring/pregex.html#
喜欢就关注一下吧:
点个在看你最好看
本文分享自 DeepHub IMBA 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!