成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

太好用了,這個更人性化的正則庫 -- Humre

開發 后端
今天給大家介紹一個可以讓我們用“人類”的方式來寫正則表達式的庫。

正則表達式大家應該有了解過吧?它功能很強大,但有一個痛點就是不太容易讀寫,我們需要了解正則的很多語法規則才能寫出一個健壯的正則表達式,很多朋友估計聽到正則表達式估計都焦頭爛額了。

就沒有解決辦法嗎?

有的,今天給大家介紹一個可以讓我們用“人類”的方式來寫正則表達式的庫。

Humre

沒錯,這個庫就是 Humre,就是 Human(人類) + re(正則表達式) 的組合,單看這個名字還是很有來頭啊。

GitHub 地址:??https://github.com/asweigart/humre???

PyPi:??https://pypi.org/project/Humre/???

這個庫其實很新,第一次 commit 是在 2022/7/21,作者是 Al Sweigart,就是寫 pyautogui 庫(已有 7.1k star)的那個人,所以還是有一定可信賴度的。

這個庫解決的問題就是讓我們可以用更“人類”,也就是更語義化的方式編寫正則表達式。

   “

   注意:當前時間(2022/9/4)這個庫還沒有發布 1.0 版本,所以相關 API 可能會更改,具體的最新 API 請參考原 GitHub 倉庫的最新說明。

   ”

基本體驗

OK,我們先來一個例子看看,比如我們我們現在要從一段文字中提取出一個電話號碼,比如原文本如下:

Call 415-555-1234 today!

我們需要提取出其中的電話號碼,那么用常規的正則表達式就是這么寫的:

\d{3}-\d{3}-\d{4}

意思就是匹配“三個數字-三個數字-四個數字”,那么用 Python 就可以這么寫:

from re import *
text = 'Call 415-555-1234 today!'
regexStr = '\d{3}-\d{3}-\d{4}'
result = compile(regexStr).search(text)
print(result.group())

那么用 Humre 就可以寫成這樣:

from humre import *
text = 'Call 415-555-1234 today!'
regexStr = exactly(3, DIGIT) + '-' + exactly(3, DIGIT) + '-' + exactly(4, DIGIT)
result = compile(regexStr).search(text)
print(result.group())

可以看到整個正則表達式就變得語義化了,exactly 指的就是精確匹配,DIGIT 指的就是數字,exactly(3, DIGIT) 就是精確匹配三個數字,也就是 \d{3}的意思。

運行結果都是一樣的:

415-555-1234

我們觀察可以發現,這里我們僅僅是把 re 這個庫換成了 humre,然后修改了下 regexStr 就可以實現正則表達式的語義化表示了,是不是還挺簡單的?

這時候有人說,我現在也沒感覺出這個庫有什么優勢啊,反而寫得更長了。

那好,咱們再來一個例子,找出所有十六進制數字,這個十六進制數字可能帶前綴 0x 或者 0X,普通正則怎么寫?

import re
re.compile('(?:(?:0x|0X)[0-9a-f]+)|(?:(?:0x|0X)[0-9A-F]+)|(?:[0-9a-f]+)|(?:[0-9A-F]+)')

感覺可讀性怎么樣?

那如果這時候換成 Humre 呢?就可以這樣寫:

from humre import *
compile(
either(
noncap_group(noncap_group(either('0x', '0X')), one_or_more(chars('0-9a-f'))),
noncap_group(noncap_group(either('0x', '0X')), one_or_more(chars('0-9A-F'))),
noncap_group(one_or_more(chars('0-9a-f'))),
noncap_group(one_or_more(chars('0-9A-F')))
)
)

是不是清晰多了?either 指的就是其中某一個符合條件就可以,然后傳入了四個參數,noncap_group 指的就是將內容看作一個整體來匹配,one_or_more 指的就是一個或更多,這樣我們就可以清晰地知道這個正則表達式什么含義了。

再來一個例子,匹配一個帶或不帶逗號的數字,并且可以匹配小數點,那么普通正則就這樣寫:

import re
re.compile(r'(?:\+|-)?(?:(?:\d{1,3}(?:,\d{3})+)|\d+)(?:\.\d+)?')

顫抖吧!估計正則專家都不一定一眼讀出來這是啥意思,有沒有錯誤。

那用 Humre 怎么寫呢?

from humre import *
compile(
# optional negative or positive sign:
optional(noncap_group(either(PLUS_SIGN, '-'))),
# whole number section:
noncap_group(either(
# number with commas:
noncap_group(between(1, 3, DIGIT), one_or_more(noncap_group(',', exactly(3, DIGIT)))),
# number without commas:
one_or_more(DIGIT)
)),
# fractional number section (optional)
optional(noncap_group(PERIOD, one_or_more(DIGIT)))
)

是不是又清晰了?

這里一共拆分為了三部分,正負號、數字、小數點,其中正負號和小數點都是可選的,所以可以加一個 optional ,noncap_group 照例還是整體匹配,然后有一些常量 PLUS_SIGN 就可以代表加號,between 就可代表從幾到幾。整體這么一拆分,并添加注釋和分級,是不是可讀性就大大增強了?

OK,到這里,體會到 Humre 的便捷之處了吧~

Humre 真的有必要嗎?

在我看來,使用正則的人可能有兩種:一種是剛不怎么會剛入門的,另一種是精通正則的。

如果是剛入門的,那有了 Humre,我們其實可以不用過多關心正則的很多語法,上手起來就會快很多。

如果是精通正則了,那么其實可以很快寫出來某個功能需求的正則表達式,這個沒問題。

但寫出來之后,如果遇到問題了想要排查,那其實還得費點功夫,

當然排查過程也可以借助于很多優秀的正則表達式輔助工具,比如:

  •  https://regexr.com/
  •  https://regex101.com/

所以排查問題還好。

但到了維護階段,或者項目被別人來維護了,不管是自己還是別人,看到這個正則表達式想看出是什么意思,那其實就不太好辦了。

所以,這種語義化的正則不論對于正則小白還是專家,都是有一定幫助的。

語義化表

了解了 Humre 的基本功能之后,如果我們想要使用它的話,其實就是找到它的一些 API 功能就好了,比如 optional, nocap_group 等等都什么意思,對應正則表達式的什么功能,這里總結了一些常用的方法和含義:

另外還有一些常量表示如下:

另外 Humre 還提供了一些常用的表達,比如十六進制 HEXADECIMAL,參考如下:

這里簡單列一下,但最新的 API 建議還是參考官方文檔:https://github.com/asweigart/humre#quick-reference

后面需要做什么?用這個庫上手寫幾個,感受一下,練上幾個就熟練了。

提示

當然,這個庫好用是好用的,但距離成熟可能還有一點時間哈,在 1.0 版本之前,其中的 API 可能還會迭代,所以還不建議直接上生產環境。

如果真的要上生產環境,建議鎖死版本號,避免帶來潛在的問題。

總結

好了,這里主要就是給大家介紹下這個正則庫,有了它,我們的正則表達式就可以變得更加清晰易讀,希望對大家有幫助~

責任編輯:龐桂玉 來源: Python綠色通道
相關推薦

2021-04-22 09:56:32

MYSQL開發數據庫

2013-07-29 10:46:51

編程語言

2012-08-30 09:47:16

企業社交

2020-12-29 10:45:55

開發設計代碼

2014-02-10 17:48:00

Windows 8.1

2011-11-14 10:06:59

網絡安全SOC人性化

2012-09-24 16:05:03

imo即時通訊

2009-06-05 10:36:22

智能客服呼叫中心

2024-12-13 16:01:35

2024-09-09 13:06:37

GPT-4圖靈測試語言模型

2021-05-19 14:55:29

谷歌Google Maps地圖

2011-01-11 09:23:04

PythonRuby

2025-05-16 07:30:00

2009-08-27 09:35:55

Windows 7黑屏激活

2024-05-11 09:38:05

React編譯器React 19

2022-05-31 09:42:49

工具編輯器

2022-08-01 07:02:06

SpringEasyExcel場景

2012-05-09 11:31:24

2020-06-23 15:58:42

心電圖

2012-05-08 16:13:36

iPhone
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视频网站在线观看 | 最近日韩中文字幕 | 欧美一级毛片在线播放 | 黄视频免费在线 | 久久久精品视频一区二区三区 | 国产精品久久国产精品 | 精品久久久久久 | 国产精品免费看 | 日韩精品在线免费观看 | 日韩在线观看一区 | 粉嫩粉嫩芽的虎白女18在线视频 | 欧美一区二区三区 | 成年人黄色小视频 | 日韩精品在线播放 | 色偷偷888欧美精品久久久 | 国产一区二区三区 | 99爱国产| 国产激情免费视频 | 日本精品视频 | 日本电影韩国电影免费观看 | 国内精品免费久久久久软件老师 | 久久久久国产精品 | 久久精品国产一区二区电影 | 久久久久国产一区二区三区 | 黑人精品欧美一区二区蜜桃 | www成年人视频| 亚洲第一天堂无码专区 | 在线亚洲一区二区 | 国产视频一区二区 | 亚洲精品国产第一综合99久久 | 91视频观看 | 日韩精品成人 | 在线观看亚洲 | 九色 在线| 欧美日一区 | 亚州午夜精品 | 久久中文字幕视频 | 天天干天天想 | 精品av天堂毛片久久久借种 | 一区二区三区四区在线播放 | 亚洲精品在线播放 |