『壹』 python 中的問題 關於re模塊
importre
str10="."
str10_list=str10.split()
pattern=re.compile(r"(?P<match_word>The)",re.I)#/<match_word>
print("output#39:")
forwordinstr10_list:
ifpattern.search(word):
print("{:s}".format(pattern.search(word).group('match_word')))
這樣就對了
『貳』 python re模塊中 (P) (P=name) 及 \g<name> 三者的使用區別
題主你好,
沒有單獨的(?P)這種用法, 猜測應該指的是(?P<name>), (?P=name),g<name>這三者的用法.
首先說(?P<name>),它其實和單個圓括弧,(),本質上一樣, 只不過在後面引用分組中多了一種引用方法:
(123)對於這個分組, 你引用時只能是1(這種也是我們最常用的分組與引用的方法),見例子:
=====
希望可以幫到題主, 歡迎追問.
『叄』 Python之pandas數據整理及分組統計
對數據進行整理以及分組統計
一、數據整理
1、行、列的插入與刪除
2、索引整理
3、重復值處理
4、排序,排名
5、數據框連接
6、數據分段
pandas.cut(x,bins,right=True,labels=None,retbins=False,precision=3,include_lowest=False)
x:需要切分的數據
bins:切分區域
right : 是否包含右端點默認True,包含
labels:對應標簽,用標記來代替返回的bins,若不在該序列中,則返回NaN
retbins:是否返回間距bins
precision:精度
include_lowest:是否包含左端點,默認False,不包含
7、多級索引
8、字元串處理
類似於Python
二、分組統計
『肆』 Python 標准庫模塊 - re
正則表達式引擎對正則表達式文本進行編譯生成正則表達式對象,再由正則表達式對象對目標文本進行匹配,後返回匹配結果。
正則表達式中一共包含 2 中字元: 普通字元 、 元字元
匹配單個字元的元字元及其含義:
匹配重復性的元字元及其含義:
匹配位置的元字元及其含義:
分組匹配的元字元及其含義:
表示或運算的元字元:
轉義元字元:
在 Python 中使用正則表達式,我們需要藉助 re 模塊提供的強大 API,下面我們就來學習幾個 re 模塊常用的介面吧~
參數說明: findall("正則表達式", "要匹配的字元串", flags=標志1|標志2|...)
返回值:以列表形式返回匹配到的字元串。
下面,我們用 findall 返回 Python 之禪中首尾用到的反義詞:
運行結果:
當正則表達式中含有一個以上分組時, findall 返回的列表由元組構成,元組中包含每個分組匹配到的內容。如果只有一個分組,則返回由該分組匹配到的內容組所構成的列表:
match 函數返回的結果是一個 SRE_Match 對象:
SRE_Match 具有很多的屬性,比如 .string 屬性可以方便我們我獲取在匹配時輸入的字元串:
屬性 .re 可以獲取匹配時使用的編譯後的正則表達式模式:
由於默認使用了 re.UNICODE ,所以我們這里的 w 可以匹配中文字元。
屬性 .regs 則以列表的形式返回正則表達式匹配到的內容以及各個分組陪陪到的內容,不過請注意,返回的都是索引的形式:
可以使用序列切片來看一下我們的正則表達式及其中的兩個分組所匹配到的內容:
SRE_Match 對象也提供了非常多好用的方法,比如 groups 可以獲取各個分組匹配到的內容:
group 則可以靈活地獲取正則表達式或對應分組匹配到的內容:
如果使用的正則表達式定義了分組的名稱, group 還可以通過名稱獲取相應分組匹配的內容:
在定義了分組的名稱之後,還可以方便地使用 groupdict 以字典的形式返回所有分組匹配的結果:
最後需要注意的是, match 從字元串的開頭開始匹配,如果開頭不符合要求,則直接返回 None 。
與 match 匹配開頭不同, search 匹配第一個符合規則的字元串,未成功則返回 None 。參數: re.search(pattern, string, flags=0) ;返回值同 match 。
在介紹 match 的使用時,最後一個例子,由於我們在字元串前面添加了 'PYTHON' 導致 match 使用原來的正則表達式無法匹配,返回 None 。此時,使用 search 就可以迎刃而解啦:
運行結果:
小結:
參數: re.split(pattern, string, maxsplit=0, flags=0) , split 功能非常強大,以正則表達式匹配到的標志來分隔字元串,比如下面這樣一個混亂的字元串,我們要提取其中所有的數字:
下面,我們就來詳細介紹一下 split 的用法。
首先,是以單字元切割:
以分號切割時,共產生了 4 個子字元串,放在列表中返回。
下面,還是以單字元切割,但可以使用正則表達式中的 [] 來指定多種字元:
由於字元串 line 中有連續的 2 個分號,逗號或者空格,因此可以使用 [;s,]+ 來切割:
最後,上面的字元串在切割時,分隔符都沒有被保留下來,使用括弧捕獲分組,即可保留分隔符:
re.sub 提供比字元串的 replace 方法更加強大的功能:對於輸入的字元串 string ,利用正則表達式 pattern 強大的字元串處理功能,實現復雜的字元串替換處理為 repl ,返回被替換後的字元串。
下面的例子中,我們將句子中多餘的空格和數字去掉:
如果想要知道替換過程中,共發生了多少次替換,可以使用 subn :
小結:
上述的案例中,我們每次都需要傳入正則表達式,相應的函數每次在調用時,都需要編譯一次正則表達式。如果上述過程需要多次重復,那麼每次都去耗費時間編譯正則表達式是很不劃算的。
re 模塊為我們提供了 compile 函數,用來編譯正則表達式模式,返回編譯好模式。因此,可以把那些常用的正則表達式編譯成正則表達式對象,以提高效率。
格式: re.compile(pattern, flags=0) ,其中 pattern 為編譯時用的表達式字元串, flags 為編譯標志位,用於修改正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。常用的 flags 有:
註:使用按位或 | 連接多個 flags 。
我們上述介紹的 re 模塊的匹配、分割、替換函數, compile 函數的返回值類提供了相應的方法,使用方式類似,只是不需要傳入正則表達式字元串而已。
由於用法幾乎一致,這里就不一一舉例啦~
貪婪模式 : * + ? {m,n} ,正則表達式的重復默認總是盡可能多得向後匹配內容。
非貪婪模式 : *? +? ?? {m,n}? ,盡可能少的匹配內容。