可視化正則表達式教程

做者: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

clipboard.png

使用正則,咱們只需輸入單詞'cool'做爲模式,它就會匹配該單詞。服務器

'cool'

正則表達式與咱們指望的單詞'cool'匹配時,它的操做方式不是單詞級別而是字符級別,這是咱們須要理清的一個點。微信

注意點:正則表達式在字符級別工做,而不是單詞級別。

clipboard.png

這意味着正則表達式'cool'也將與如下句子匹配。函數

clipboard.png

基本構建基塊

如今咱們已經理解了關鍵點,接下來咱們瞭解一下如何使用正則表達式匹配簡單字符。

特定字符

咱們能夠在正則表達式中指定字符,它將匹配文本中的全部實例。

例如,下面給出的正則表達式將匹配文本中全部'a'實例:

'a'

clipboard.png

也可使用從09的任何數字,來匹配數字。

'3'

clipboard.png

請注意,默認狀況下,正則表達式區分大小寫,所以如下正則表達式不匹配任何內容。

'A'

clipboard.png

空格字符

咱們可使用特殊的轉義序列來檢測特殊字符,例如空格和換行符。

clipboard.png

除了上述常見的,咱們還有:

  • \\r 回車
  • \\f 換頁
  • \\e 可執行模式

特殊字符

正則表達式提供了一堆內置的特殊字符,這些字符能夠一次匹配一組字符,這些字符以反斜槓\\開頭。

模式:\\d

它匹配09之間的數字。

clipboard.png

注意,匹配項是一位數。 所以,咱們在下面有4個不一樣的匹配項,而不是單個數字18.04

clipboard.png

模式:\\s

它匹配任何空格字符(空格、製表符或換行符)。

clipboard.png

模式:\\w

它匹配任何小寫字母(az),大寫字母(AZ),數字(09)和下劃線。

clipboard.png

模式:.

它匹配除換行符(\\n)之外的任何字符。

clipboard.png

let str = 'line 1\nline2'
str.match(/./g)

// 結果:["l", "i", "n", "e", " ", "1", "l", "i", "n", "e", "2"]

模式:否認

若是我咱們使用上述模式的大寫形式,則表示他們否認的一面。

例如,若是\\d匹配從09的任何數字,則\\D將匹配09以外的任何數字。

clipboard.png

字符集

字符集模式以[ 開始,以]結束,並匹配括號括起來的字符。例如,如下模式匹配任何字符'a', 'e', 'i', 'o''u'

clipboard.png

咱們也可使用如下模式來代替\\d的功能。

clipboard.png

除了指定全部數字,咱們還可使用連字符合-僅需指定開始和結束數字。 所以,咱們能夠用[0-9]代替[0123456789]

clipboard.png

例如,[2-4]可用於匹配24(即234)之間的任何數字。

clipboard.png

咱們能夠在括號內使用上面講的特殊字符。 例如,匹配09之間的任何數字或空白字符:

clipboard.png

下面,列出了一些通用模式及其含義。

clipboard.png

錨點

正則表達式還具備特殊的處理程序,以使模式僅在字符串的開頭或結尾時才匹配。

咱們只能使用 ^ 字符來匹配以指定開始的模式。例如

clipboard.png

一樣,咱們能夠在字符後使用$字符 ,表示以指定字符結尾。 例如:

clipboard.png

轉義元字符

考慮一種狀況,咱們要徹底匹配單詞 "Mr. Stark"

若是咱們想用這樣的格式 Mr. Stark 來匹配,那麼它會產生意想不到的效果。由於咱們知道.在正則表達式中有特殊的意義。

clipboard.png

所以,若是咱們想是精確匹配字符自己,則須要對特殊的元字符(如.$等)進行轉義。

clipboard.png

下面是元字符列表,若是直接使用它們,記住要對它們進行轉義。

^ $ . * + ? { } [ ] \ | ( )

重複類

如今咱們能夠對任何字符進行模式匹配,接着,咱們來接觸較複雜一點的模式。

笨的方式來匹配重複字符

僅使用到目前爲止所學的知識,幼稚的方法就是重複這種模式。 例如,咱們能夠經過重複字符級模式來匹配兩位數字。

\d\d

clipboard.png

量詞

正則表達式提供特殊的量詞來指定其前面字符的不一樣重複類型。

固定重複

咱們可使用{...}量詞來指定模式應重複的次數。

clipboard.png

例如,能夠將先前用於匹配兩位數字的模式修改成:

clipboard.png

咱們還可使用相同的量詞指定重複範圍。 例如,要匹配2位數或者4位數字,可使用如下模式:

clipboard.png

當應用於句子時,它將同時匹配4位數字和2位數字。

clipboard.png

注意 最小和最大計數之間不該該有任何空格,例如, \\d{2, 4}不工做。

靈活的量詞

正則表達式還提供了量詞*+? 使用它能夠指定字符的靈活重複。

? 字符表示匹配 0 次或者 一次

clipboard.png

例如,假設咱們想匹配單詞「sound」和「sounds」,其中「s」是可選的。咱們可使用?量詞。

clipboard.png

+ 字符表示匹配 一 次或者屢次

例如,咱們可使用正則 \\d+找到任意長度的數字。

clipboard.png

* 字符表示匹配 0 次或者屢次

在Python中的用法

Python在標準庫中提供了一個名爲"re"的模塊來使用正則表達式。

對原始字符串的需求

要在Python中指定正則表達式,咱們在r以前建立原始字符串

pattern = r'\d'

爲了理解爲何咱們在前面加上r,咱們嘗試打印不帶**r**的表達式\\t

>>> pattern = '\t'
>>> print(pattern)

能夠看到,當咱們不使用原始字符串時,字符串\\t在Python中被視爲製表符的轉義字符。

如今咱們把它轉換成原始字符串,咱們會獲得咱們指定的任何東西

>>> pattern = r'\t'
>>> print(pattern)
\t

使用 re 模塊

要使用re模塊,咱們須要導入它:

import re

1. re.findall

這個函數容許咱們以字符串列表的形式得到全部匹配項。

import re
re.findall(r'\d', '123456')

// ['1', '2', '3', '4', '5', '6']

2. re.match

此函數在字符串開頭搜索模式,並將第一個匹配項做爲匹配對象返回。若是沒有找到該模式,則返回None

import re

match = re.match(r'batman', 'batman is cool')
print(match)

// <re.Match object; span=(0, 6), match='batman'>

clipboard.png

使用match對象,咱們能夠將匹配的文本做爲

print(match.group())

// batman

在咱們的模式不在句子開頭的狀況下,咱們將不會得到任何匹配。

import re

match = re.match(r'batman', 'The batman is cool')
print(match)

// None

3. re.search

此函數還能夠查找模式的第一次出現,但該模式能夠出如今文本中的任何位置。若是沒有找到該模式,則返回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和完善,你們面試能夠參照考點複習,另外關注公衆號,後臺回覆福利,便可看到福利,你懂的。

相關文章
相關標籤/搜索