正規表示式

2021-10-03 03:22:37 字數 3464 閱讀 6201

1.模式(規則)

2.文字

import re

import requests

# match 匹配,必須從文字的頭開始匹配

# search 搜尋,可以從任意位置開始匹配

# .*?裡的.是指任意字元,但只是乙個字元,*代表前面的字元出現零次或者多次,問號表示懶惰模式,匹配乙個就不匹配了

text =

'kkgig'

text1 =

'sjlafdhoisf'

r_text = re.match(

'(.*)(gig)'

, text)

r_text1 = re.search(

'jla'

, text1)

print

(r_text.group(1)

)# 列印第乙個括號裡的內容

print

(r_text.group(2)

)print

(r_text1.group(0)

)

import re

line =

'huang123'

# 1.以h開頭

pattern =

'^h'

# ^號代表必須以後面的字元作為開頭

# 2.以h開頭後面跟著乙個字元

pattern =

'^h.'

# 3.以h開頭後面跟著任意數量的數字

pattern =

'^h\d*'

# \d表示數字

# 4.以3結尾

pattern =

'3$'

# $表示這個符號前面的內容是結尾的內容

# 5.以h開頭,以3結尾,中間只有乙個字元

pattern =

'^h.3$'

# 6.以h開頭,以3結尾,中間只有乙個字元

pattern =

'^h.*3$'

# .能夠匹配到任意字元,除了:\n,如果需要,新增re.s的標誌

response = re.match(pattern, line, re.s)

response = re.match(pattern, line)

print

(response)

import re

line =

'hahahahaha'

# 1.匹配第乙個h和第二個h之間的內容

# 2.使用非貪婪限定符

pattern =

'^h.*?h'

# * 作為前面的字元出現多次的限定符,它是盡量多的匹配內容,貪婪模式

# ?就是非貪婪字元

res = re.search(pattern, line)

print

(res)

# * 表示0到無窮個

# ?表示0到1個 如.?表示出現了0次或一次

# 如果?前面是字元,那麼代表0-1個前面字元,如果前面是個數的限定符,就是非貪婪模式

# 獲取h和h之間,需要包含特定數量字元的子串

pattern =

'h.h'

# h和h之間有4到6個字元,但這也是貪婪模式,加問號非貪婪

# 使用+表示h和h之間至少有乙個字元

pattern =

'h.h'

# 1,什麼都不寫,表示無窮

# . == +,+ 表示前面的字元出現1到無窮次

# 0-無窮

# + ==

# * ==

# ? ==

# h == hhhhh

import re

line =

'sss127'

pattern =

'(sss|127)'

# # | 表示或者的意思,哪個在前面線匹配到則匹配哪個

res = re.search(pattern, line)

print

(res)

# 表示中括號內的字元可以被匹配 [123] = (1|2|3)

pattern =

'[123]'

res = re.search(pattern, line)

# 數字是0-9, \d == [0123456789] == [0-9]

# 所有小寫字母 [a-z] ,大寫字母[a-z]

# [a-za-z0-9_]表示數字字母下劃線

# 表示郵箱 [email protected]

# [a-za-z0-9_]+@[a-za-z0-9_]+\.com

# 想要確切匹配之前的特殊字元,就需要加轉義

# 用^表示非的功能

pattern =[^

1]# \s匹配任何空白字元,包括空格、製表符、換頁符等等。== [\f\n\r\t\v]

# \s匹配任何非空白符。== [^\f\n\r\t\v]

# \w等價於[a-za-z0-9_]

# \w與\w相反

# \d表示所有數字 == [0-9]

import re

pattern =

'[a-za-z-]+'

line =

'i want to be a coder'

# findall的作用是找到所有的匹配項

# 返回值是所有找到內容的字串的列表

words = re.findall(pattern, line)

print

(words)

# finditer

# 返回值是乙個迭代器,每次迭代的內容是sre_match

words = re.finditer(pattern, line)

for item in words:

print

(item.group(0)

)# compile的作用:能夠生成乙個類,這個類用於匹配資料,能夠性更高

# 下面的兩行**相當於上面的一行search語句

pat = re.

compile

(pattern)

res = pat.search(line)

# 類的頻繁建立和刪除會造成很大的效能問題

# 如果迴圈匹配內容的話,就需要用到compile,一般用在迴圈中,compile提出來

# sub

res = re.sub(pattern,

'words'

, line)

import re

# 匹配所有單詞的第乙個字母

line =

'i love you'

pattern =

"([a-za-z-])[a-za-z-]*"

res = re.findall(pattern, line)

print

(res)

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...