當前位置:首頁 » 編程語言 » grouppython

grouppython

發布時間: 2023-03-12 11:52:14

1. python 正則表達式 groups和group有什麼區別

group和groups是兩個不同的函數。

一般,m.group(N) 返回第N組括弧匹配的字元。
而m.group() == m.group(0) == 所有匹配的字元,與括弧無關,這個是API規定的。

m.groups() 返回所有括弧匹配的字元,以tuple格式。
m.groups() == (m.group(0), m.group(1), ...)

正則表達式中,group()用來提取分組截獲的字元串,()用來分組。

組是通過 "(" 和 ")" 元字元來標識的。 "(" 和 ")" 有很多在數學表達式中相同的意思;它們一起把在它們裡面的表達式組成一組。舉個例子,你可以用重復限制符,象 *, +,?, 和 {m,n},來重復組里的內容,比如說(ab)* 將匹配零或更多個重復的 "ab"。

如果不引入括弧,整個個表達式作為一個組,是group(0)



對於題目中的例子:

m = re.match("([abc])+", "abc")
+號在括弧外面。括弧最多匹配到一個字元,要麼是a, 要麼是c,這個python引擎匹配的是末尾的c。
而m.group() == m.group(0) 這個返回的是整個匹配的字元串"abc".

2. Python 正則匹配為什麼group(1)返回為空,group(2)返回為none

你的正則從a字元串提取不到任何信息,自然列印就空白了。

3. Python分組

前言分組原理

核心:

1.不論分組鍵是數組、列表、字典、Series、函數,只要其與待分組變數的軸長度一致都可以傳入groupby進行分組。

2.默認axis=0按行分組,可指定axis=1對列分組。

對數據進行分組操作的過程可以概括為:split-apply-combine三步:

1.按照鍵值(key)或者分組變數將數據分組。

2.對於每組應用我們的函數,這一步非常靈活,可以是python自帶函數,可以是我們自己編寫的函數。

3.將函數計算後的結果聚合。

1 分組模式及其對象

1.1 分組的一般模式

三個要素:分組依據、數據來源、操作及其返回結果

df.groupby(分組依據)[數據來源].使用操作

1.2 分組依據的本質

1.3Groupby 對象

通過 ngroups 屬性,可以訪問分為了多少組:

通過 groups 屬性,可以返回從 組名映射到 組索引列表的字典:

當 size 作為 DataFrame 的屬性時,返回的是表長乘以表寬的大小,但在 groupby 對象上表示統計每個組的 元素個數:

通過 get_group 方法可以直接獲取所在組對應的行,此時必須知道組的具體名字:

1.4 分組的三大操作

分組的三大操作:聚合、變換和過濾

2.聚合函數

2.1內置聚合函數

包括如下函數: max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod

2.2agg 方法

【a】使用多個函數

當使用多個聚合函數時,需要用列表的形式把內置聚合函數的對應的字元串傳入,先前提到的所有字元串都是合法的。

【b】對特定的列使用特定的聚合函數

對於方法和列的特殊對應,可以通過構造字典傳入 agg 中實現,其中字典以列名為鍵,以聚合字元串或字元串列表為值。

【c】使用自定義函數

在 agg 中可以使用具體的自定義函數,需要注意傳入函數的參數是之前數據源中的列,逐列進行計算

【d】聚合結果重命名 如果想要對結果進行重命名,只需要將上述函數的位置改寫成元組,元組的第一個元素為新的名字,第二個位置為原來的函數,包括聚合字元串和自定義函數

3 變換和過濾

3.1 變換函數與 transform 方法

變 換 函 數 的 返 回 值 為 同 長 度 的 序 列, 最 常 用 的 內 置 變 換 函 數 是 累 計 函 數:cum- count/cumsum/cumprod/cummax/cummin ,它們的使用方式和聚合函數類似,只不過完成的是組內 累計操作。

3.2 組索引與過濾

過濾在分組中是對於組的過濾,而索引是對於行的過濾

組過濾作為行過濾的推廣,指的是如果對一個組的全體所在行進行統計的結果返回 True 則會被保留,False 則該組會被過濾,最後把所有未被過濾的組其對應的所在行拼接起來作為 DataFrame 返回。

在 groupby 對象中,定義了 filter 方法進行組的篩選,其中自定義函數的輸入參數為數據源構成的 DataFrame 本身,在之前例子中定義的 groupby 對象中,傳入的就是 df[['Height', 'Weight']] ,因此所有表方法和屬性 都可以在自定義函數中相應地使用,同時只需保證自定義函數的返回為布爾值即可。

4 跨列分組

4.1 apply 的引入

4.2 apply 的使用

在設計上,apply 的自定義函數傳入參數與 filter 完全一致,只不過後者只允許返回布爾值

【a】標量情況:結果得到的是 Series ,索引與 agg 的結果一致

【b】Series 情況:得到的是 DataFrame ,行索引與標量情況一致,列索引為 Series 的索引

【c】DataFrame 情況:得到的是 DataFrame ,行索引最內層在每個組原先 agg 的結果索引上,再加一層返 回的 DataFrame 行索引,同時分組結果 DataFrame 的列索引和返回的 DataFrame 列索引一致

4. python|re模塊group函數 'str' object has no attribute 'group'

import re

inputStr = "hello 123 world 456"

m = re.search(r"(?P<number>\d+)", inputStr)

if m:
g = m.group('number')
print(g)
正則表達式模塊re的其他基本用法,可自行學習。

5. python正則表達式groups和group有什麼區別

group和groups是兩個不同的函數。
一般,m.group(N)
返回第N組括弧匹配的字元。
而m.group()
==
m.group(0)
==
所有匹配的字元,與括弧無關,這個是API規定的。
m.groups()
返回所有括弧匹配的字元,以tuple格式。
m.groups()
==
(m.group(0),
m.group(1),
...)
對你給的例子:
m
=
re.match("([abc])+",
"abc")
你的+號在括弧外面。括弧最多匹配到一個字元,要麼是a,
要麼是c,這個python引擎匹配的是末尾的c。
而m.group()
==
m.group(0)
這個返回的是整個匹配的字元串"abc".
關於捕獲型括弧在正則表達式里的用法,參見相關文檔。

6. Python常用的正則表達式處理函數詳解

正則表達式是一個特殊的字元序列,用於簡潔表達一組字元串特徵,檢查一個字元串是否與某種模式匹配,使用起來十分方便。

在Python中,我們通過調用re庫來使用re模塊:

import re

下面介紹Python常用的正則表達式處理函數。

re.match函數

re.match 函數從字元串的起始位置匹配正則表達式,返回match對象,如果不是起始位置匹配成功的話,match()就返回None。

re.match(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。具體參數為:

re.I:忽略大小寫。

re.L:表示特殊字元集 w, W, , B, s, S 依賴於當前環境。

re.M:多行模式。

re.S:即 . ,並且包括換行符在內的任意字元(. 不包括換行符)。

re.U:表示特殊字元集 w, W, , B, d, D, s, S 依賴於 Unicode 字元屬性資料庫

re.X:為了增加可讀性,忽略空格和 # 後面的注釋。

import re #從起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.match('def','abcdefghi') print(r2)

運行結果:

其中,span表示匹配成功的整個子串的索引。

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

group(num):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。

groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。

import re s='This is a demo' r1=re.match(r'(.*) is (.*)',s) r2=re.match(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

運行結果:

上述代碼中的(.*)和(.*?)表示正則表達式的貪婪匹配與非貪婪匹配。

re.search函數

re.search函數掃描整個字元串並返回第一個成功的匹配,如果匹配成功則返回match對象,否則返回None。

re.search(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

import re #從起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.search('def','abcdefghi') print(r2)

運行結果:

使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。

group(num=0):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。

groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。

import re s='This is a demo' r1=re.search(r'(.*) is (.*)',s) r2=re.search(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

運行結果:


從上面不難發現re.match與re.search的區別:re.match只匹配字元串的起始位置,只要起始位置不符合正則表達式就匹配失敗,而re.search是匹配整個字元串,直到找到一個匹配為止。

re.compile 函數

compile 函數用於編譯正則表達式,生成一個正則表達式對象,供 match() 和 search() 這兩個函數使用。

re.compile(pattern[, flags])

pattern:一個字元串形式的正則表達式。

flags:可選,表示匹配模式,比如忽略大小寫,多行模式等。

import re #匹配數字 r=re.compile(r'd+')  r1=r.match('This is a demo') r2=r.match('This is 111 and That is 222',0,27) r3=r.match('This is 111 and That is 222',8,27)   print(r1) print(r2) print(r3)

運行結果:

findall函數

搜索字元串,以列表形式返回正則表達式匹配的所有子串,如果沒有找到匹配的,則返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字元串。

pos:可選參數,指定字元串的起始位置,默認為0。

endpos:可選參數,指定字元串的結束位置,默認為字元串的長度。

import re #匹配數字 r=re.compile(r'd+')  r1=r.findall('This is a demo') r2=r.findall('This is 111 and That is 222',0,11) r3=r.findall('This is 111 and That is 222',0,27)   print(r1) print(r2) print(r3)

運行結果:

re.finditer函數

和 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並把它們作為一個迭代器返回。

re.finditer(pattern, string, flags=0)

pattern:匹配的正則表達式。

string:待匹配的字元串。

flags:標志位,用於控制正則表達式的匹配方式,如是否區分大小寫,多行匹配等。

import re  r=re.finditer(r'd+','This is 111 and That is 222') for i in r:   print (i.group())

運行結果:

re.split函數

將一個字元串按照正則表達式匹配的子串進行分割後,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正則表達式。

string:待匹配的字元串。

maxsplit:分割次數,maxsplit=1分割一次,默認為0,不限次數。

flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。

import re  r1=re.split('W+','This is 111 and That is 222')  r2=re.split('W+','This is 111 and That is 222',maxsplit=1)  r3=re.split('d+','This is 111 and That is 222')  r4=re.split('d+','This is 111 and That is 222',maxsplit=1)  print(r1) print(r2) print(r3) print(r4)

運行結果:

re.sub函數

re.sub函數用於替換字元串中的匹配項。

re.sub(pattern, repl, string, count=0, flags=0)

pattern:正則中的模式字元串。

repl:替換的字元串,也可為一個函數。

string:要被查找替換的原始字元串。

count:模式匹配後替換的最大次數,默認0表示替換所有的匹配。

import re  r='This is 111 and That is 222' # 刪除字元串中的數字 r1=re.sub(r'd+','',r) print(r1) # 刪除非數字的字元串  r2=re.sub(r'D','',r) print(r2)

運行結果:

到此這篇關於Python常用的正則表達式處理函數詳解的文章就介紹到這了,希望大家以後多多支持!

7. python group函數有幾個返回值

一個,返回的是符合正則表達式的字元串。
group(0)返回整個字元串;
group(1)返回第一個匹配值;
group(2)返回第二個匹配值;
group(3)返回第三個匹配值。
依次類推。

8. python怎麼訪問group里的元素

你說的是python使用re後產生的group么,其實這個就是一個列表,你可以直接通過切片去訪問。
m = re.match("([abc])+", "abc")
print m.group()[0]如果解決了您的問題請採納!
如果未解決請繼續追問

熱點內容
動態規劃01背包演算法 發布:2024-11-05 22:17:40 瀏覽:849
nasm編譯器如何安裝 發布:2024-11-05 22:01:13 瀏覽:180
登錄密碼在微信的哪裡 發布:2024-11-05 22:00:29 瀏覽:739
c防止反編譯工具 發布:2024-11-05 21:56:14 瀏覽:247
安卓虛擬機怎麼用 發布:2024-11-05 21:52:48 瀏覽:344
php時間搜索 發布:2024-11-05 20:58:36 瀏覽:479
燕山大學編譯原理期末考試題 發布:2024-11-05 20:13:54 瀏覽:528
華為電腦出現臨時伺服器 發布:2024-11-05 20:05:08 瀏覽:408
斗戰神免費挖礦腳本 發布:2024-11-05 19:53:25 瀏覽:665
網吧伺服器分別是什麼 發布:2024-11-05 19:45:32 瀏覽:392