python大佬養成計畫 正規表示式

2021-09-13 02:59:27 字數 4492 閱讀 2999

re = regular experssion

re 模組使 python 語言擁有全部的正規表示式功能。

compile 函式根據乙個模式字串和可選的標誌引數生成乙個正規表示式物件。該物件擁有一系列方法用於正規表示式匹配和替換。

作用: 對於字串進行處理, 會檢查這個字串內容是否與你寫的正規表示式匹配

如果匹配, 拿出匹配的內容;

如果不匹配, 忽略不匹配內容;

編寫正則的規則

pattern 匹配的正規表示式

string 要匹配的字串

1). findall
import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'

pattern_2 = r'sheen'

print(re.findall(pattern_1,str)) #['hello', 'hello']

print(re.findall(pattern_2,str)) #['sheen']

2).match
match嘗試從字串的起始位置開始匹配,

import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'

pattern_2 = r'sheen'

print(re.match(pattern_1,str)) #<_sre.sre_match object span="(0," match="hello">

print(re.match(pattern_1,str).group()) #返回match匹配的字串內容,hello

print(re.match(pattern_2,str)) #none

3).search
search會掃瞄整個字串, 只返回第乙個匹配成功的內容;

import re

str = 'hello sheen,hello cute.'

pattern_1 = r'hello'

pattern_2 = r'sheen'

print(re.search(pattern_1,str)) #<_sre.sre_match object span="(0," match="hello">

print(re.search(pattern_1,str).group()) #hello

print(re.search(pattern_2,str)) #<_sre.sre_match object span="(6," match="sheen">

print(re.search(pattern_2,str).group()) #sheen

.: 匹配除了\n之外的任意字元; [.\n]

\d: digit--(數字), 匹配乙個數字字元, 等價於[0-9]

\d: 匹配乙個非數字字元, 等價於[^0-9]

\s: space(廣義的空格: 空格, \t, \n, \r), 匹配單個任何的空白字元;

\s: 匹配除了單個任何的空白字元;

\w: 字母數字或者下劃線, [a-za-z0-9_]

\w: 除了字母數字或者下劃線, [^a-za-z0-9_]

import re

# .print(re.findall(r'.','sheen\nstar\n')) #['s', 'h', 'e', 'e', 'n', 's', 't', 'a', 'r']

#\d#\d

print(re.findall(r'\d','當前聲望30')) #['3', '0']

print(re.findall(r'\d','當前聲望30')) #['當', '前', '聲', '望']

#\s#\s

print(re.findall(r'\s', '\n當前\r聲望\t為30')) #['\n', '\r', '\t']

print(re.findall(r'\s', '\n當前\r聲望\t為30')) #['當', '前', '聲', '望', '為', '3', '0']

#\w#\w

print(re.findall(r'\w','lucky超可愛!!')) #['l', 'u', 'c', 'k', 'y', '超', '可', '愛']

print(re.findall(r'\w','lucky超可愛!!')) #['!', '!']

匹配字元出現次數:

*: 代表前乙個字元出現0次或者無限次;    d*,  .*

+: 代表前乙個字元出現一次或者無限次; d+

?: 代表前乙個字元出現1次或者0次; 假設某些字元可省略, 也可以不省略的時候使用

第二種方式:

: 前乙個字元出現m次;

: 前乙個字元至少出現m次; * == ; + ===

: 前乙個字元出現m次到n次; ? ===

import re

#* 代表前乙個字元出現0次或者無限次

print(re.findall(r's*','sheenstar')) #['s', '', '', '', '', 's', '', '', '', '']

print(re.findall(r's*','hello')) #['', '', '', '', '', '']

#+ 代表前乙個字元出現一次或者無限次

print(re.findall(r's+','sheenstar')) #['s', 's']

print(re.findall(r's+','hello')) #

# ? 代表前乙個字元出現1次或者0次

print(re.findall(r'188-?', '188 6543')) #['188']

print(re.findall(r'188-?', '188-6543')) #['188-']

print(re.findall(r'188-?', '148-6543')) #

# 匹配**號碼

pattern = r'\d[\s-]?\d[\s-]?\d'

print(re.findall(pattern,'188 0123 4567')) #['188 0123 4567']

print(re.findall(pattern,'188-0123-4567')) #['188-0123-4567']

print(re.findall(pattern,'18801234567')) #['188-0123-4567']

可以從網上搜尋正規表示式生成器,使用別人寫好的規則,自己測試。

import re

# | 表示或者

pattern = r'(25[0-5]|2[0-4]\d|[0-1]\d|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d|[1-9]?\d)$'

print(re.findall(pattern,'172.25.254.34')) #[('172', '25', '254', '34')]

matchobj_1 = re.match(pattern,'172.25.254.34')

if matchobj_1:

print('匹配項:',matchobj_1.group()) #172.25.254.34

else:

print('未找到匹配項')

matchobj_2 = re.match(pattern,'172.25.254.343')

if matchobj_2:

print('匹配項:',matchobj_2.group())

else:

print('未找到匹配項')

python大佬養成計畫 HTML DOM

dom document object model 譯為文件物件模型,是 html 和 xml 文件的程式設計介面。html dom 定義了訪問和操作 html 文件的標準方法。dom 以樹結構表達 html 文件。html dom 定義了所有 html 元素的物件和屬性,以及訪問它們的方法。換言之...

python大佬養成計畫 flask應用

要求將使用者登陸時的資訊,傳送至後台與資料庫進行比對,來判斷使用者是否可登陸 config.py檔案,用來建立遠端連線的類 class db host 192.168.1.227 user root passwd sheen port 3306 dbname test 主程式 import pymy...

python大佬養成計畫 Jinja2模板

jinja2是python下乙個被廣泛應用的模版引擎,他的設計思想 於django的模板引擎,並擴充套件了其語法和一系列強大的功能。其中最顯著的乙個是增加了沙箱執行功能和可選的自動轉義功能,這對大多應用的安全性來說是非常重要的。基於unicode並能在python2.4之後的版本執行,包括pytho...