python正則替換分組
1. python中的正則表達式
因為正則表達式中有兩組小括弧,即兩個分組
findall會以元組形式返回所有分組中的內容,即[('127.0.0.1', '.1')]
其中'127.0.01'表示匹配最外層大括弧的內容
'.1'表示匹配'.[0-9]{1,3}'的內容(最後一次重復時為.1)
由於('.[0-9]{1,3}')為需要重復三次的分組,該括弧不能省略
而使用findall就一定會顯示括弧分組的內容
若想只顯示127.0.0.1而不顯示'.1',可考慮使用match方法
返回從字元串起始位置開始,第一次匹配正則表達式的內容
match返回的結果為re.Match對象,可通過group()顯示匹配的字元串,即127.0.0.1
通過groups()顯示匹配的所有分組,即('127.0.0.1', '.1')
如圖所示:
2. 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".
關於捕獲型括弧在正則表達式里的用法,參見相關文檔。
3. python 正則表達式re.sub函數替換內容的一個比較基礎的問題
正則表達式一個比較常見的用途是找到所有模式匹配的字元串並用不同的字元串來替換它們。sub方法提供一個替換值,可以是字元串或函數,和一個要被處理的字元串。
1、這里的sub方法,是被編譯成『RegexObject』實例後的實例的方法
Sub(replacement,string[,count =0 ])
1)返回的字元串是在字元串中用RE最左邊不重復的匹配來替換。如果模式沒有被發現,字元將沒有被改變的返回。
2)可選參數count是模式匹配後替換的最大次數;count必須是非負整數。預設值是0表示替換所有的匹配。
例子:
2、模塊級函數:sub方法
註:這些函數(包括sub函數)使用RE字元串作為第一個參數,而後面的參數與相應的「RegexObject」方法的參數相同,返回要麼是None,要麼是一個『MatchObject』實例。
(實際sub返回的是字元串,,兩者說法不一致,以實際為准)
Re.sub的作用在於:使用給定的替換內容將匹配模式的子字元串(最左端並且非重疊的子字元串)替換掉
3、作為替換的組號
在2的例子中,只是把一個字元串用其他的內容替換掉了。用replace這個字元串方法能輕松達到同樣的效果。而正則表達式允許以更靈活的方式進行搜索,同時它們也允許進行功能更強大的替換。
見證re.sub強大功能的最簡單方式就是在替換字元串中使用組號。在替換內容中以『\\n』型式出現的任何轉義序列都會被模式中與組n匹配的字元串替換掉。例如,假設要把『*something*』用『<em>someting</em>』替換掉,前者是在普通文本文檔(比如Email)中進行強調的常用方法,而後者則是相應的HTML代碼(用於網頁)
這里把所有的* *含的字元串都替換掉了。剛開始我以為只替換*world*。記一筆。
4. 學Python正則表達式,這一篇就夠了
正則表達式是一個特殊的字元序列,可以幫助您使用模式中保留的專門語法來匹配或查找其他字元串或字元串集。 正則表達式在UNIX世界中被廣泛使用。
註:很多開發人員覺得正則表達式比較難以理解,主要原因是缺少使用或不願意在這上面花時間。
re模塊在Python中提供對Perl類正則表達式的完全支持。如果在編譯或使用正則表達式時發生錯誤,則re模塊會引發異常re.error。
在這篇文章中,將介紹兩個重要的功能,用來處理正則表達式。 然而,首先是一件小事:有各種各樣的字元,這些字元在正則表達式中使用時會有特殊的意義。 為了在處理正則表達式時避免混淆,我們將使用:r'expression'原始字元串。
匹配單個字元的基本模式
編譯標志可以修改正則表達式的某些方面。標志在re模塊中有兩個名稱:一個很長的名稱,如IGNORECASE,和一個簡短的單字母形式,如。
1.match函數
此函數嘗試將RE模式與可選標志的字元串進行匹配。
下面是函數的語法 :
這里是參數的描述 :
pattern : 這是要匹配的正則表達式。
string : 這是字元串,它將被搜索用於匹配字元串開頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標志。 這些是修飾符,如下表所列。
re.match函數在成功時返回匹配對象,失敗時返回None。使用match(num)或groups()函數匹配對象來獲取匹配的表達式。
示例
當執行上述代碼時,會產生以下結果 :
2.search函數
此函數嘗試將RE模式與可選標志的字元串進行匹配。
下面是這個函數的語法 :
這里是參數的描述 :
pattern : 這是要匹配的正則表達式。
string : 這是字元串,它將被搜索用於匹配字元串開頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標志。 這些是修飾符,如下表所列。
re.search函數在成功時返回匹配對象,否則返回None。使用match對象的group(num)或groups()函數來獲取匹配的表達式。
示例
當執行上述代碼時,會產生以下結果 :
3.匹配與搜索
Python提供基於正則表達式的兩種不同的原始操作:match檢查僅匹配字元串的開頭,而search檢查字元串中任何位置的匹配(這是Perl默認情況下的匹配)。
示例
當執行上述代碼時,會產生以下結果 :
4.搜索和替換
使用正則表達式re模塊中的最重要的之一是sub。
模塊
此方法使用repl替換所有出現在RE模式的字元串,替換所有出現,除非提供max。此方法返回修改的字元串。
示例
當執行上述代碼時,會產生以下結果 :
5.正則表達式修飾符:選項標志
正則表達式文字可能包含一個可選修飾符,用於控制匹配的各個方面。 修飾符被指定為可選標志。可以使用異或(|)提供多個修飾符,如前所示,可以由以下之一表示 :
6.正則表達模式
除了控制字元(+ ? . * ^ $ ( ) [ ] { } | ),所有字元都與其自身匹配。 可以通過使用反斜杠將其轉換為控制字元。
7.正則表達式示例
字元常量
字元類
特殊字元類
重復匹配
非貪婪重復
這匹配最小的重復次數 :
用圓括弧分組
反向引用
這與以前匹配的組再次匹配 :
備擇方案
python|perl : 匹配「python」或「perl」
rub(y|le) : 匹配 「ruby」 或 「ruble」
Python(!+|?) : 「Python」後跟一個或多個! 還是一個?
錨點
這需要指定匹配位置。
帶括弧的特殊語法
開課吧廣場-人才學習交流平台-開課吧