python pandas 正規表示式 re模組

2022-05-16 09:41:05 字數 4368 閱讀 7738

目錄

1、正則解說

數量詞的貪婪模式與非貪婪模式

正規表示式通常用於在文字中查詢匹配的字串。python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;非貪婪的則相反,總是嘗試匹配盡可能少的字元。例如:正規表示式"ab*"如果用於查詢"abbbc",將找到"abbb"。而如果使用非貪婪的數量詞"ab*?",將找到"a"。

一般字元、字符集和轉義字元

一般字元

完全匹配字元

abcabc

\轉義字元\..

.匹配除換行符\n以外的所有字元

.q, 1, +, ......

匹配字符集中任意字元

[abc]

a, b, c

\s匹配空白字元,即[\n\t\f\r...]

a\sb

a b, a    b, ......

\s匹配非空白字元

a\sb

ab, a4b, asb, ......

\w匹配單詞字元,即[a-za-z0-9]

a\wc

abc, a8c, ......

\w匹配非單詞字元,即[^a-za-z0-9]

a\wc

a-c, a?c, ......

\d匹配數字

a\dc

a3c, ......

\d匹配非數字

a\dc

adc, a-c, ......

限定匹配次數

*匹配前乙個字元0到無限次

ab*c

ac, abc, abbc, ......

匹配前乙個字元1到無限次

ab+c

abc, abbc, ......

匹配前乙個字元0或1次

ab?c

ac, abc

匹配前乙個字元m次

abcabbbc

匹配前乙個字元m至n次,m省略代表0至n次,n省略代表m至無限次

abcabbc, abbbc, ......

*? +? ?? ? ?

使得*,+,?,變為非貪婪模式

ab*?

a限定邊界

$匹配字串末尾(多行模式下是每一行字串末尾,re.m)

c$abc, 12c, ?-c, ......

^匹配字串開頭(多行模式下是每一行字串開頭,re.m)

^ccab, c12, c??, ......

\a匹配整個字串開頭

\accab, ......

\z匹配整個字串末尾

c\zabc, ......

邏輯、分組

|或,匹配左邊或者右邊的表示式

abc|def

abc,  def, ......

(...)

括號內為一組;分組有編號,從1開始算起;分組作為乙個整體,|只在分組內部有效;

(abc)\.(123|456)+

abc.456, abc.123,  ......

(?p...)

除編號外的另乙個分組名

\引用編號為的分組匹配的字串

(\d)abc\1

5abc5, ......

(?p=name)

引用別名為的分組匹配到的字串

(?p=\d)abc(?p=one)

7abc7, ......

特殊構造

(?ilmsux)

ilmsux每個字元代表乙個匹配模式

(?!abc)

abc, abc, ......

(?#...)

#之後的內容作為注釋被忽略

(?=...)

之後的字串內容需要匹配表示式,不消耗字串內容

a(?=\d)

後面是數字的a

(?!...)

之後的字串內容需要不匹配表示式,不消耗字串內容

a(?!\d)

後面不是數字的a

(?<=...)

之前的字串內容需要匹配表示式,不消耗字串內容

(?<=\d)a

前面是數字的a

(?之後的字串內容需要不匹配表示式,不消耗字串內容

(?前面不是數字的a

2、中文字符集

u"[\u4e00-\u9fa5]」

3、re模組常用方法

compile():編譯正規表示式,生成乙個正規表示式( pattern )物件,供 match() 和 search() 這兩個函式使用

pa = re.compile('

et')

正規表示式物件的方法:

group() 返回被 re 匹配的字串。

start() 返回匹配開始的位置

end() 返回匹配結束的位置

span() 返回乙個元組包含匹配 (開始,結束) 的位置

常用方法:

match():嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match()就返回none

in [14]: re.match('

i','

i will never let it go, jack!')

out[14]: <_sre.sre_match object; span=(0, 1), match='

i'>in [15]: re.match('

w','

i will never let it go, jack!')

no out put

search():掃瞄整個字串並返回第乙個成功的匹配

in [17]: re.search('

i','

i will never let it go, jack!')

out[17]: <_sre.sre_match object; span=(3, 4), match='

i'>

findall():在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的,則返回空列表,可指定起始位置

in [28]: re.findall('

.i', '

i will never let it go, jack!')

out[28]: ['

wi', '

i']

in [32]: re.compile('.i').findall('i will never let it go, jack!', 0, 10)

out[32]: ['wi']

finditer():和 findall 類似,在字串中找到正規表示式所匹配的所有子串,並把它們作為乙個迭代器返回

in [54]: for m in re.finditer('.i', 'i will never let it go, jack!'):

...: print(m, m.group(), m.start(), m.end(), m.span())

...:

<_sre.sre_match object; span=(2, 4), match='wi'> wi 2 4 (2, 4)

<_sre.sre_match object; span=(16, 18), match=' i'> i 16 18 (16, 18)

sub():替換字串中所有的匹配項,返回匹配後的字串

in [19]: re.sub('

i', '

i', '

i will never let it go, jack!')

out[19]: '

i will never let it go, jack!

'

split():按照能夠匹配的子串將字串分割後返回列表,可指定最大分割次數

in [41]: re.split('

,', '

runoob, runoob, runoob.')

out[41]: ['

runoob

', '

runoob

', '

runoob.

']

in [43]: re.split(',', 'runoob, runoob, runoob.', 1)

out[43]: ['runoob', ' runoob, runoob.']

Python pandas,建立Series型別

numpy只能處理數值型別的資料。pandas除了可以處理數值型別外,還可以處理非數值型別的資料 例如 字串 時間序列等 pandas常用的資料型別 series 一維,帶標籤的陣列,對應資料庫中的一條記錄 dataframe 二維,series容器,對應資料庫中的表 demo.py series的...

python pandas使用記錄

在使用numpy中array格式的矩陣時,我們通常使用如a 2 4,5 10 獲取陣列中一部分資料,但是dataframe結構的陣列就不能這麼寫,可以使用iloc方法,即index locate,另外有個相似的方法loc,這個方法是通過column名字進行資料定位的 import pandas as...

Python pandas總結未完

obj.index obj.values obj4.name population obj4.index.name state obj.index bob steve jeff ryan data frame pd.dataframe data frame2 pd.dataframe data,co...