Python中的正則表達式【附示例】:如何實現?

已發表: 2021-01-29

在處理來自任何來源的原始數據時,提取正確的信息非常重要,這樣才能從數據中獲得有意義的見解。 有時很難從數據中提取特定模式,尤其是在文本數據的情況下。

文本數據由通過調查表、報廢網站和其他來源收集的信息段落組成。 使用 pandas 函數或其他自定義函數對不同的字符串訪問器進行 Channing 可以完成工作,但如果需要獲得更具體的模式怎麼辦? 正則表達式可以輕鬆完成這項工作。

目錄

什麼是正則表達式 (RegEx)?

正則表達式是字符串的一組字符的表示。 它為字符串中的特定模式提供了一個通用公式,有助於從數據池中分離出正確的信息。 該表達式通常由有助於形成規則的符號或字符組成,但乍一看,它可能看起來很奇怪且難以掌握。 這些符號具有此處描述的相關含義。

學習世界頂尖大學的數據科學課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

RegEx 中的元字符

  1. '.':是通配符,匹配單個字符(任何字符,但只有一次)
  2. ^:表示字符串的開始
  3. $:表示字符串的結尾
  4. [ ]:匹配 [ ] 中的一組字符
  5. [az]:匹配字符 a,b,...,z 的範圍之一
  6. [^abc] : 匹配不是 a、b 或 c 的字符。
  7. a|b:匹配 a 或 b,其中 a 和 b 是字符串
  8. () : 為操作符提供作用域
  9. \ :啟用特殊字符(\t、\n、\b、\.)的轉義
  10. \b:匹配單詞邊界
  11. \d :任何數字,相當於 [0-9]
  12. \D:任何非數字,等價於 [^0-9]
  13. \s :任何空格,相當於 [ \t\n\r\f\v]
  14. \S : 任何非空格,等價於 [^\t\n\r\f\v]
  15. \w : 任何字母數字,等價於 [a-zA-Z0-9_]
  16. \W : 任何非字母數字,等價於 [^a-zA-Z0-9_]
  17. '*':匹配零次或多次出現
  18. '+':匹配一個或多個匹配項
  19. '?': 匹配零次或一次
  20. {n}:正好 n 次重複,n>=0
  21. {n,}:至少 n 次重複
  22. {,n}:最多 n 次重複
  23. {m,n}:至少 m 次重複,最多 n 次重複

了解解決方法的示例

現在您已經了解了組成 RegEx 的字符,讓我們看看它是如何工作的:

1. 郵件過濾:

假設您想從一個長段落中過濾掉所有的電子郵件 ID。 電子郵件的一般格式是:

用戶名@domain_name。 <top_level_domain>

用戶名可以是字母數字,因此,我們可以使用 \w 來表示它們,但用戶可能會創建一個帳戶為 firstName.surname。 為了解決這個問題,我們將轉義點並創建一組字符。 接下來,domain_name 應該只是字母,因此,A-Za-z 將表示它。 頂級域通常是 .com、.in、.org,但根據用例,您可以選擇整個字母範圍或過濾特定域。

它的正則表達式如下所示:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

這裡還聲明了模式的開始和結束,頂級域只能包含 2-4 個字符。 整個表達式有3組。

2.日期過濾:

您提取的文本信息可能包含日期,並且沒有為您提供單獨的列。 日期是有助於過濾數據或時間序列分析的重要因素。 特定日期採用日期/月/年的格式,其中日期和月份可以互換。

此外,月份可以是數字形式,也可以是字母形式,字母形式可以是縮寫詞或全名。 這主要取決於我們的數據中有多少案例,只能通過hit and trial來實現。

一個涵蓋各種日期的簡單正則表達式如下所示:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

此模式使用連字符或正斜杠捕獲日期格式。 日期和月份限於一位或兩位數,年份最多為 40 位。 在這種情況下,各個實體被捕獲為可選的組。

另請閱讀: Python 項目理念和主題

如何在 Python 中實現它?

我們剛剛構建的正則表達式滿足了我們假設的相應標準,現在是時候在 Python 代碼中實現它們了。 Python 有一個名為 re 的內置模塊,它實現了這些表達式的工作。 簡單地,

重新進口

模式 = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

Re 模塊提供了廣泛的功能,它們都有不同的用例。 讓我們看一些重要的功能:

  1. re.findall():此函數根據傳遞的模式返回測試字符串中所有匹配項的列表。 考慮這個例子:

string = '25-12-1999 隨機文本 25/12/1999'

打印(re.findall(模式,字符串))

它將僅返回列表中字符串中的日期。

  1. re.sub():這個函數中的 Sub 代表替換,做同樣的事情。 它用提供的替換值替換匹配項。 該函數接受計數的模式、字符串、替換值和可選參數。 count 參數控制要替換的出現次數。 默認情況下,它會替換所有這些並返回新字符串。
  2. re.split():它在匹配的位置拆分字符串,並將部分作為單獨的字符串返回列表中。
  3. re.search():此函數返回包含在字符串中找到的匹配項以及它捕獲的所有組的匹配對象。 當您想將這些組存儲為單獨的列時,它可以派上用場。

要執行此操作:

匹配 = re.search(模式,字符串)

匹配組(1)

Group(0) 返回整個匹配項,對應的下一個數字表示其他組。

結帳:印度的 Python 開發人員薪水

結論

正則表達式是捕獲文本數據中模式的強大方法。 掌握各種字符的命令可能需要一些額外的努力,但它簡化了複雜用例中數據提取的過程。

舉一些 Python 中正則表達式的例子。

以下示例說明了 Python 中的功能或正則表達式:
一種。 電子郵件過濾
正則表達式可以有效地用於過濾電子郵件。 電子郵件過濾的常規語法是 - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
此表達式分為三組並處理許多情況,包括 - 當用戶名是字母數字時以及當它有一個點時,例如,“first.last@”。 此表達式將用於包含 2-4 個字符的頂級域。
灣。 日期過濾
在處理數據過濾時,日期可能是一個關鍵因素。 您處理的文本數據通常包含日期。 從普通文本中提取數據的正則表達式或 RegEx 是 - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
日期和月份最多可以是 2 位數字,而月份最多可以是 4 位數字。

Python中正則表達式的實現涉及到哪些函數?

Python中正則表達式的實現涉及以下函數:
1. re.findall() - 此函數接受要與文本字符串匹配的模式。 它返回匹配的字符串。
2. re.sub() - “re.sub”中的Sub代表“替換”。 此方法執行與“re.findall()”函數完全相同的功能。
3. re.split() - 分隔分隔符周圍的字符串,作為參數傳遞給它。 分隔符可以是任何東西。
4. re.search() - 此函數返回在字符串中找到的匹配項以及它捕獲的其他字符串組。

正則表達式中使用了哪些特殊序列?

以下是正則表達式中使用的一些特殊序列:
1. A:檢查字符串是否以給定字符開頭。
2.(正斜杠)b:檢查字符串是否以給定字符開頭或結尾。 (string)/b 檢查開頭,而 (反斜杠) b (string) 檢查結尾。
3. B:與b完全相反。 檢查字符串是否不以給定字符開頭。
4. d:檢查字符串中的數值。
5. D:檢查任何非數值或字符。
6. s:檢查任何空白字符。
7. S:檢查任何非空白字符。
8. w:檢查任何字母數字字符。
9. W:檢查任何非字母數字字符。