做者:Amit Chaudhary
譯者:前端小智
來源: dev
點贊再看,微信搜索
【大遷世界】關注這個沒有大廠背景,但有着一股向上積極心態人。本文
GitHub
https://github.com/qq44924588... 上已經收錄,文章的已分類,也整理了不少個人文檔,和教程資料。**
最近開源了一個 Vue 組件,還不夠完善,歡迎你們來一塊兒完善它,也但願你們能給個 star 支持一下,謝謝各位了。前端
github 地址:https://github.com/qq44924588...vue
雙12阿里服務器27
塊,通用點擊這裏購買能夠找我返現30,等於27
塊就能買到了,只限新用戶,能夠用家人的手機號購買!git
在NLP中,根據模式檢查文本或從文本中提取與特定模式匹配的內容是常見的任務。正則表達式是實現這一點的強大幫手。github
NLP (Natural Language Processing) 是人工智能(AI)的一個子領域。
儘管功能強大,可是正則表達式常常使人生畏,由於它有許多咱們須要記住的命令,並且在複雜的結構中,還須要有必定的邏輯能力。面試
在這篇文章中,主要用示圖的方式來演示正則表達式的各類概念。 目的固然是幫助你們也包括我本身創建一個關於正則表達式的心智模型。正則表達式
咱們先從一個簡單的例子開始,在這個例子中,咱們試圖在文本中找到cool
這個單詞。express
使用正則,咱們只需輸入單詞'cool'
做爲模式,它就會匹配該單詞。服務器
'cool'
正則表達式與咱們指望的單詞'cool'
匹配時,它的操做方式不是單詞級別而是字符級別,這是咱們須要理清的一個點。微信
注意點:正則表達式在字符級別工做,而不是單詞級別。
這意味着正則表達式'cool'
也將與如下句子匹配。函數
如今咱們已經理解了關鍵點,接下來咱們瞭解一下如何使用正則表達式匹配簡單字符。
咱們能夠在正則表達式中指定字符,它將匹配文本中的全部實例。
例如,下面給出的正則表達式將匹配文本中全部'a'
實例:
'a'
也可使用從0
到9
的任何數字,來匹配數字。
'3'
請注意,默認狀況下,正則表達式區分大小寫,所以如下正則表達式不匹配任何內容。
'A'
咱們可使用特殊的轉義序列來檢測特殊字符,例如空格和換行符。
除了上述常見的,咱們還有:
\\r
回車\\f
換頁\\e
可執行模式正則表達式提供了一堆內置的特殊字符,這些字符能夠一次匹配一組字符,這些字符以反斜槓\\
開頭。
模式:\\d
它匹配0
到9
之間的數字。
注意,匹配項是一位數。 所以,咱們在下面有4個不一樣的匹配項,而不是單個數字18.04
。
模式:\\s
它匹配任何空格字符(空格、製表符或換行符)。
模式:\\w
它匹配任何小寫字母(a
到z
),大寫字母(A
到Z
),數字(0
到9
)和下劃線。
模式:.
它匹配除換行符(\\n
)之外的任何字符。
let str = 'line 1\nline2' str.match(/./g) // 結果:["l", "i", "n", "e", " ", "1", "l", "i", "n", "e", "2"]
模式:否認
若是我咱們使用上述模式的大寫形式,則表示他們否認的一面。
例如,若是\\d
匹配從0
到9
的任何數字,則\\D
將匹配0
到9
以外的任何數字。
字符集模式以[
開始,以]
結束,並匹配括號括起來的字符。例如,如下模式匹配任何字符'a'
, 'e'
, 'i'
, 'o'
和 'u'
。
咱們也可使用如下模式來代替\\d
的功能。
除了指定全部數字,咱們還可使用連字符合-
僅需指定開始和結束數字。 所以,咱們能夠用[0-9]
代替[0123456789]
:
例如,[2-4]
可用於匹配2
到4
(即2
或3
或4
)之間的任何數字。
咱們能夠在括號內使用上面講的特殊字符。 例如,匹配0
到9
之間的任何數字或空白字符:
下面,列出了一些通用模式及其含義。
正則表達式還具備特殊的處理程序,以使模式僅在字符串的開頭或結尾時才匹配。
咱們只能使用 ^
字符來匹配以指定開始的模式。例如
一樣,咱們能夠在字符後使用$
字符 ,表示以指定字符結尾。 例如:
考慮一種狀況,咱們要徹底匹配單詞 "Mr. Stark"
。
若是咱們想用這樣的格式 Mr. Stark
來匹配,那麼它會產生意想不到的效果。由於咱們知道.
在正則表達式中有特殊的意義。
所以,若是咱們想是精確匹配字符自己,則須要對特殊的元字符(如.
、$
等)進行轉義。
下面是元字符列表,若是直接使用它們,記住要對它們進行轉義。
^ $ . * + ? { } [ ] \ | ( )
如今咱們能夠對任何字符進行模式匹配,接着,咱們來接觸較複雜一點的模式。
僅使用到目前爲止所學的知識,幼稚的方法就是重複這種模式。 例如,咱們能夠經過重複字符級模式來匹配兩位數字。
\d\d
正則表達式提供特殊的量詞來指定其前面字符的不一樣重複類型。
固定重複
咱們可使用{...}
量詞來指定模式應重複的次數。
例如,能夠將先前用於匹配兩位數字的模式修改成:
咱們還可使用相同的量詞指定重複範圍。 例如,要匹配2
位數或者4
位數字,可使用如下模式:
當應用於句子時,它將同時匹配4位數字和2位數字。
注意 最小和最大計數之間不該該有任何空格,例如,
\\d{2, 4}
不工做。
靈活的量詞
正則表達式還提供了量詞*
,+
和?
使用它能夠指定字符的靈活重複。
?
字符表示匹配 0 次或者 一次
例如,假設咱們想匹配單詞「sound」
和「sounds」,其中「s」是可選的。咱們可使用?
量詞。
+
字符表示匹配 一 次或者屢次
例如,咱們可使用正則 \\d+
找到任意長度的數字。
*
字符表示匹配 0 次或者屢次
Python在標準庫中提供了一個名爲"re"
的模塊來使用正則表達式。
要在Python中指定正則表達式,咱們在r以前建立原始字符串
pattern = r'\d'
爲了理解爲何咱們在前面加上r
,咱們嘗試打印不帶**r**
的表達式\\t
。
>>> pattern = '\t' >>> print(pattern)
能夠看到,當咱們不使用原始字符串時,字符串\\t
在Python中被視爲製表符的轉義字符。
如今咱們把它轉換成原始字符串,咱們會獲得咱們指定的任何東西
>>> pattern = r'\t' >>> print(pattern) \t
要使用re
模塊,咱們須要導入它:
import re
這個函數容許咱們以字符串列表的形式得到全部匹配項。
import re re.findall(r'\d', '123456') // ['1', '2', '3', '4', '5', '6']
此函數在字符串開頭搜索模式,並將第一個匹配項做爲匹配對象返回。若是沒有找到該模式,則返回None
。
import re match = re.match(r'batman', 'batman is cool') print(match) // <re.Match object; span=(0, 6), match='batman'>
使用match
對象,咱們能夠將匹配的文本做爲
print(match.group()) // batman
在咱們的模式不在句子開頭的狀況下,咱們將不會得到任何匹配。
import re match = re.match(r'batman', 'The batman is cool') print(match) // None
此函數還能夠查找模式的第一次出現,但該模式能夠出如今文本中的任何位置。若是沒有找到該模式,則返回None
。
import re match = re.search(r'batman', 'the batman is cool') print(match.group()) // batman
今天就跟你們分享到這裏,咱們下期再見,記得三連哦。
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
原文:https://dev.to/amitness/a-vis...
文章每週持續更新,能夠微信搜索「 大遷世界 」第一時間閱讀和催更(比博客早一到兩篇喲),本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,整理了不少個人文檔,歡迎Star和完善,你們面試能夠參照考點複習,另外關注公衆號,後臺回覆福利,便可看到福利,你懂的。