Python正規表示式簡介

2021-10-24 17:19:32 字數 4441 閱讀 2745

作者|i***n alghani khalid 編譯|vk **|towards datas science

假設你要根據給定的查詢搜尋某個內容。如果你只依靠乙個字串,你就得不到你想要的東西。那麼,如何在海量資訊中尋找你需要的東西呢?

當然,你需要乙個模式來識別你想要查詢的字串。為此,我們可以使用正規表示式(regular expression,regex)。

在本文中,我將向你展示它的概念和應用,以解決資料科學中的問題,特別是使用python對文字進行預處理。

正規表示式,或者我們稱之為regex或re,是一種特殊型別的字串,可用於匹配字串中的術語或單詞。

它由特殊字串行組成,因此我們可以根據需要使用它來匹配任何術語。這裡有幾個你可以使用的特殊字元,

回想一下反斜槓有幾個特殊的序列。如果你想包含所有的單詞或數字而不把它們都寫在方括號內,這是非常有用的。你可以使用這些序列,例如,

對於這些特殊字元,你可以根據要提取的術語組合它們。例如,你想要從tweet列表中檢索hashtags,可以使用類似「#\w+」的模式。

模式的組合也是可以的,因為有一條規則說,

如果乙個模式與乙個模式結合,就會產生另乙個模式。

在你了解了regex的概念之後,現在讓我們看看如何將其應用於處理文字。

第一種方法是刪除我們不用於處理文字的術語。假設你要對tweet集合進行文字挖掘。因此,在挖掘tweet之前,必須先對它們進行預處理,因為我們希望使我們的計算更有效,並避免其中任何無意義的資訊。例如,你有這樣一條微博,

#nasional wapres: jumlah orang miskin bertambah gara-gara pandemi covid-19
有幾個術語你想刪除,比如提及,標籤,鏈結等。在python中,我們可以使用乙個名為sub的方法從re庫中刪除這些術語。

我們可以將引數設定到函式中,例如regex格式的模式、用於替換術語的字串,最後是要處理的字串。

re.sub(pattern, replacement, data) 

- pattern: 正規表示式的模式

- replacement: 要替換的字串

- data: 要處理的變數或字串

通過使用這個函式,我們可以像這樣使用它

import re

# 原始微博

tweet = "#nasional wapres: jumlah orang miskin bertambah gara-gara pandemi covid-19 "

# 使用正規表示式進行預處理

# 這是結果,

# wapres: jumlah orang miskin bertambah gara-gara pandemi covid-19

我想展示的另乙個例子是搜尋和檢索字串內部的子字串。在本例中,我將從乙個被稱為資料科學的「hello world」的資料集中舉乙個例子。這是鐵達尼號的資料集。

對於那些不知道的人來說,這是乙個資料集,被用來作為kaggle競賽的介紹。這項競賽的目標是根據與乘客相對應的資料來**乘客是否倖存。資料集看起來像這樣

它由幾個列組成,描述乘客的人口統計、票價、姓名,以及描述乘客是否倖存的「survived」列。在本例中,讓我們關注「name」列。讓我們看幾個例子,

0                               braund, mr. owen harris

1 cumings, mrs. john bradley (florence briggs th...

2 heikkinen, miss. laina

3 futrelle, mrs. jacques heath (lily may peel)

4 allen, mr. william henry

5 moran, mr. james

6 mccarthy, mr. timothy j

7 palsson, master. gosta leonard

8 johnson, mrs. oscar w (elisabeth vilhelmina berg)

9 nasser, mrs. nicholas (adele achem)

10 sandstrom, miss. marguerite rut

11 bonnell, miss. elizabeth

12 saundercock, mr. william henry

13 andersson, mr. anders johan

14 vestrom, miss. hulda amanda adolfina

15 hewlett, mrs. (mary d kingcome)

16 rice, master. eugene

17 williams, mr. charles eugene

18 vander planke, mrs. julius (emelia maria vande...

19 masselmani, mrs. fatima

name: name, dtype: object

根據上面的樣本,你看到它有什麼模式嗎?如果你詳細了解,每個名字都有自己的標題,例如mr., mrs., miss., master.等等。我們可以將這些名稱提取為乙個新的函式,稱為「title」。title包括了.標點符號。因此,我們可以使用模式提取它。

如何從每個名字中提取標題?我們可以使用re庫中的乙個名為search的函式。使用該函式,我們可以根據給定的模式提取術語。它需要模式和字串列表。**是這樣的

def get_title(x):

# 搜尋匹配的模式

x = re.search('\w*\.', x).group()

# 刪除點標點符號以簡化分析過程

x = re.sub('\.', '', x)

return x

train = train.drop('name', axis=1)

train.head()

確保在搜尋字串中的乙個詞之後,用乙個名為group的方法鏈結函式。或者看起來像這樣,

# 如果不使用group方法,它將顯示

<_sre.sre_match object span="(8," match="mr.">

如果你做得對,結果會是這樣的,

下面是搜尋函式及其方法的摘要

re.search(pattern, data)

parameters:

- pattern: 適合我們想要的模式

- data: 我們使用的資料。它可以是字串或字串列表

methods:

- group: 它返回乙個或更多個字串。

以上是我們如何使用正規表示式來處理使用python的文字,這樣我們就可以通過刪除無意義的資訊來獲得更有意義的結論解。我還向你展示了它的概念和一些應用。我希望這篇文章對你有用。

還有一件事,回想一下我上面的**,我寫的模式就像乙個普通的字串。但是為了確保你編寫了乙個regex模式,請在引用的模式之前新增'r'字元,如下所示

# 你可以這樣寫

re.sub("#\w+", "", tweet)

# 或者像這樣

re.sub(r"#\w+", "", tweet)

就這樣,謝謝你。

參考引用

[1][2]

sklearn機器學習中文官方文件:

python正規表示式簡介

之前未接觸過正規表示式,今日看python網路爬蟲的原始碼,裡面一行正規表示式匹配的 初看之下,不是很理解,如下 myitems re.findall unicodepage,re.s 這種匹配方式,按理解應該是匹配任意字元0個或多個 re.s模式,可以匹配 n 但是這個 總覺的在這兒是多餘的,既然...

python 正規表示式 簡介

1.正規表示式 描述字串排列的一套規則 2.可以使用正規表示式提取出所有滿足規則的字串 3.在python中使用re模組是實現在python正規表示式的功能 正規表示式的基礎知識 1.原子 2.元字元 3.模式修正 原子 原子是正規表示式中最基礎的組成單位,每個正規表示式中至少包含乙個原子 1.普通...

正規表示式簡介

乙個正規表示式就是乙個模式,由與文字進行匹配的字串行組成。正規表示式有著廣泛的應用 grep sed vim make等等,某些指令碼語言如perl等更是將正規表示式納入語言內部。正規表示式由原子和運算子組成。最簡單的原子是單個字元,如果乙個正規表示式由單個字元組成,則該字元必須出現在目標文字的某處...