目錄
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('in [32]: re.compile('.i').findall('i will never let it go, jack!', 0, 10).i', '
i will never let it go, jack!')
out[28]: ['
wi', '
i']
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('in [43]: re.split(',', 'runoob, runoob, runoob.', 1),', '
runoob, runoob, runoob.')
out[41]: ['
runoob
', '
runoob
', '
runoob.
']
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...