python正則表達式

正則表達式
^行首錨定 $行尾錨定
.匹配任意字符一次
\w匹配非空白字符一次
\s匹配空白字符一次
\d匹配數字一次
*表示前面的正則表達式會重復0到多次
+匹配前面的字符重復0到多次
.+ 相當于匹配多次任意字符,至少一次
\w+相當于匹配非空字符一到多次
?前面的字符匹配一次或不匹配

有一個上面兩種類似的{}表示前面的字符出現次數
{1,}相當于+ {0,1}相當于? {n}重復n次 {m,n}重復m到n次
{0,}不相當于* ,因為它匹配到的多個字符必需是重復的

\b匹配邊界 邊界指的是匹配的一邊是空格或換行(制表符也是空格)另一邊不是空格或換行
‘ {1,}\bab’ 比配ab前面至少一個空格 ‘\bc’匹配字符c前面是個空格或換行

多個符號聯合使用,匹配一般都是盡可能多的匹配(對*而言)
匹配是從前往后開始匹配,一段滿足會打印后再從當前位置開始繼續
a.b.*ab 匹配 ‘ adb erabqw ab’會取到’adb erabqw ab’
貪婪模式與非貪婪模式,這個都是針對重復匹配的符號而言的
*盡可能多的匹配字符,.*盡可能多的匹配任意字符,非貪婪模式*?可以匹配前面字符任意次,但盡量少的匹配
+盡可能多匹配前面的字符或表達式,至少一次,非貪婪模式+?匹配前面字符字少一次,但匹配次數要滿足后面的條件就截止了
?匹配0次或者一次,非貪婪模式??能不匹配前面的字符就不匹配(匹配也只能匹配一次)這個的非貪婪模式實際用處不大
{n,}匹配前面的字符盡可能多次,且不少于n次,非貪婪模式{n,}?匹配前面字符至少n次,但滿足了后面的匹配條件了就截止
{n,m}匹配前面字符n次到m次,但盡量多的匹配,非貪婪模式{n,m}?匹配前面的字符n到m次,但盡量少的匹配

其他標識符
\B 匹配不是邊界,本身不占字符 t\B匹配t的后面不是邊界(空格) \Bt匹配t的前面不是邊界
i\Bt 相當于匹配 it i\B t 不可能匹配得到
\D 匹配非數字
\S匹配非空白字符
\W匹配\w外的字符

[]匹配字符之一 [abc] [0b]

結構符號
‘|’ 或者符號
分組
(pattern)表達式\1 表示重復匹配前面的內容 1為默認的分組號
python中 (?P<name>exp) 分組捕獲,但是可以通過name訪問

斷言
表達式(?=exp) 斷言表達式右邊出現exp
(?<=exp)表達式 斷言表達式左邊有exp
(?!exp) (?<!exp)

 

正則表達式使用
模塊 re
類方法 result =re.match() re.search() re.fullmatch() re.findall() re.finditer() .split() .groud .sub()
對象方法 對re類的對象使用 regex =re.compile(‘正則表達式’)
result= regex.match() regex.search() regex.fullmatch()
regex.findall() regex.finditer()
它們的方法大部分都公有,使用后的執行效果也差不多,有的可能用的很少占不列出

匹配模式 re.M多行模式 re.S依然從頭開始找(默認模式)

類方法 result =re.func(‘正則表達式’,待匹配的字符串,[匹配模式])

對象方法 regex =re.compile(‘正則表達式’,[匹配模式])生成對象
result =func(待匹配的字符串)

re.match(‘b’,s) 默認從索引0開始匹配s,沒有匹配到返回空,無法設置
打印result值 <_sre.SRE_Match object; span=(0, 1), match=’b’>
re.compile(‘b’) 設置從索引10,開始匹配,返回值一樣
match(s)

re.search(‘b’,s) 從0開始匹配到第一個滿足表達式,返回與match類似,對象方法可以設置起始索引
<_sre.SRE_Match object; span=(8, 9), match=’a’>
search(s,10)

re.fullmatch() 全長匹配

regex.fullmatch(s,4,5) 匹配區間全長匹配

re.findall(‘正則’,s) regex.findall(s) 返回多次match匹配的結果的列表

re.finditer(‘正則’,s) regex.finditer(s) 返回迭代器, 迭代后返回match的對象

re.match() .split() .sub

 

匹配電子郵箱
^\w[\w\.-]+@\w[\w\.-]+\.[a-zA-Z]+

匹配html標記
<a[^<>]*href=[“‘]?([^”‘]+)[“‘]?[^<>]*>

匹配URL
(\w+)://([\S]+)

切割文本單詞
lst =re.split(‘[^-\w]+’,s)

d =defaultdict(lambda :0)
for line in f:
for sub in re.split(‘[^-\w]+’,line):
if len(sub) >0:
d[sub] +=1

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88246

(0)
daishitongdaishitong
上一篇 2017-11-06
下一篇 2017-11-07

相關推薦

  • 樹 非線性結構,每個元素可有多個前驅和后繼 樹是n(n>=0)個元素的集合,n=0時,稱為空樹,樹只有一個特殊的沒有前驅的元素,稱為樹的根root,樹中除了根結點外,其余元素只能有一個前驅,可以有零個和多個后繼,子樹也有自己的根 結點:樹中的數據元素 結點的度degree:結點擁有的子樹的數目稱為度,記作d(v)。樹的度是樹內各結點的度最大值 葉子結點…

    2018-04-16
  • 高階函數

    高階函數
    柯里化
    裝飾器、文檔字符串
    functools 模塊 inspect 模塊

    2018-04-25
  • python函數的作用域,閉包,默認值等

    函數的區間 程序中的函數要在被調用的前邊來定義 同一個函數名可以多次定義,定義后會覆蓋前一個函數,調用時會調用調用處最新定義的那個函數 在函數外代碼區中定義的變量,又稱為全局變量,可以在函數中調用它 (必須在調用函數的語句之前定義這個變量,要不然會報錯) 函數中可以定義和全局變量名相同的一個變量,這樣得到的變量只能夠在函數內使用,外部無法訪問(賦值即定義) …

    Python干貨 2017-10-16
  • Python函數

    函數 數學函數 Python函數 若干語句塊、函數名稱、參數列表構成,組織代碼的最小單元 完成一定的功能 作用 結構化編程對代碼的最基本的封裝,一般按照功能組織一段代碼 復用,減少冗余代碼 簡潔美觀,可讀易懂 函數分類 內建函數,max()、reversed() 庫函數,math.ceil() 函數定義、調用 def語句定義函數 def 函數名(參數列表):…

    2018-04-16
  • Python爬蟲實戰七之計算大學本學期績點

    大家好,本次為大家帶來的項目是計算大學本學期績點。首先說明的是,博主來自山東大學,有屬于個人的學生成績管理系統,需要學號密碼才可以登錄,不過可能廣大讀者沒有這個學號密碼,不能實際進行操作,所以最主要的還是獲取它的原理。最主要的是了解cookie的相關操作。 本篇目標 1.模擬登錄學生成績管理系統 2.抓取本學期成績界面 3.計算打印本學期成績 1.URL的獲…

    2017-09-09
欧美性久久久久