15 python基礎知識 正規表示式

2021-09-05 11:04:04 字數 4590 閱讀 6586

m = re.search(

'abc'

,'hadajabcadjlae'

)if m:

# 返回匹配的內容

print

(m.group())

# 返回匹配內容的位置

print

(m.span(

))

f = re.findall(

'abcd'

,'abcasjdlaabcaksjd;abcasdjla'

)print

(f)

# 可以先生成正規表示式物件,然後再進行匹配

c = re.

compile

('cba'

)# print(type(c))

# 從開頭匹配

# m = c.match('cbasdhaj;acbaalsdk')

# 從任意位置匹配

m = c.search(

'casdhaj;acbaalsdk'

)if m:

print

(m.group())

# 匹配所有

f = c.findall(

'ahkjdcbasdkjalcbasakldjacba'

)print

(f)

此方式可以分開操作,比較靈活

import re

# 只從開頭匹配

# f = re.findall('^hello', 'asjdhelloaskd')

# 只從結尾匹配

f = re.findall(

'world$'

,'asjdhelloaskworld'

)# 同時限制開頭和結尾

f = re.findall(

'^\w*$'

,'asjdhelloaskworld'

)print

(f)

優先順序與整體

import re

# |:表示或,擁有最低的優先順序

# ():可以表示乙個整體

s = re.search(

'hell(o|w)orld'

,'akdhahellworld'

)if s:

print

(s.group(

))

分組匹配

import re

c = re.

compile

('(\d+)([a-z]+)(\d+)'

)s = c.search(

'agaj2635sdhasda237adjsd'

)if s:

# 0:表示完整匹配內容,之後的數字表示第幾組,也就是第幾個()匹配的內容

print

(s.group(0)

, s.span(0)

)print

(s.group(1)

, s.span(1)

)print

(s.group(2)

, s.span(2)

)print

(s.group(3)

, s.span(3)

)

import re

# 固定匹配

# c = re.compile('\w+

')# 動態匹配:匹配兩次巢狀的標籤

# c = re.compile('<[a-z]+><[a-z]+>\w+')

# 無名分組:\1、\2分別表示前面的第一組、第二組匹配的內容

# c = re.compile(r'<([a-z]+)><([a-z]+)>\w+')

# 命名分組:給分組()起名字

c = re.

compile

(r'<(?p[a-z]+)><(?p[a-z]+)>\w+'

)s = c.search(')

if s:

print

(s.group())

# 返回所有組的資訊,是乙個元組

print

(s.groups())

# 返回分組的字典,鍵是組的名字,值時匹配的內容

print

(s.groupdict(

))

findall

import re

# 按照正則進行匹配,但是新增()後,結果只顯示()匹配的內容

f = re.findall(

'a(abc)a'

,'asdjaabcaasdjaabcasdkabca'

)print

(f)

貪婪匹配

import re

# .+?:取消至少一次的貪婪匹配

# c = re.compile('a.+?b')

# .*?:取消任意多次的貪婪匹配

c = re.

compile

('a.*?b'

)s = c.search(

'sdhaasdajasksdbsdjbsdk'

)if s:

print

(s.group(

))

匹配模式

import re

# re.i:表示忽略大小寫

# s = re.search(r'hello', 'hello', re.i)

# re.m:多行處理,缺省會把字元當做一行處理

s = re.search(r'^hello'

,'asdkasj\nhelloajsdhkas'

, re.m)

# string = 'hello

'string =

'''hello

'''# re.s:是.可以匹配任意,作為單行處理(忽略\n)

s = re.search(r'.*?

', string, re.s)

if s:

print

(s.group(

))

字元轉義

import re

# python \\\d \\\\d r'\\d'

# re \\d \\d \\d

# 實際 \d \d \d

# 推薦使用,否則需要寫很多\

c = re.

compile

(r'\\d'

)s = c.search(

'\d'

)if s:

print

(s.group())

# 匹配'\b'字串

c = re.

compile

(r'\b'

)# \b本身有特殊含義

s = c.search(r'\b'

)if s:

print

('成功'

, s.group(

))

在定義字串的開頭新增』r』表示原始字串,可以輕鬆解決很多關於轉義的問題

正則切割

import re

c = re.

compile

(r'\d'

)string =

'正則其實不難1但是學完之後2發現什麼也不出來3是這樣吧'

# 字串是固定切割,不能解決某類的匹配切割問題

# print(string.split('1'))

# 按照正則進行切割

ret = c.split(string)

print

(ret)

# 整體方案

print

(re.split(r'\d'

, string)

)

正則替換

string =

'helloadjasdhelloskdjalkhellosdjka'

# 字串替換

new_string = string.replace(

'hello'

,'world',2

)print

(new_string)

import re

s ='how1are2you'

# 正則替換

# s2 = re.sub(r'\d', ' ', s)

# 替換時可以傳遞乙個函式,使用函式的返回值進行替換

defdouble

(s):

return

str(

int(s.group())

*2)# return '***'

# 使用專門的處理函式,可以認為的干預替換過程

s2 = re.sub(r'\d'

, double, s)

print

(s2)

Python基礎知識 正則

import re str4 r id w w w s re.match str4,id 3aea5f99 6797 48bc 8b62 767a16d748c1 print s,type s if str s none print 1 else print 2 python正則寫法 1 匯入re ...

正則基礎知識

g 全域性匹配 i 忽略大小寫 gi 以上組合 匹配乙個輸入或一行的開頭,a 匹配 an a 而不匹配 an a 匹配乙個輸入或一行的結尾,a 匹配 an a 而不匹配 an a 匹配前面元字元0次或多次,ba 將匹配b,ba,baa,baaa 匹配前面元字元1次或多次,ba 將匹配ba,baa,b...

基礎知識 正則

正規表示式簡介 測試字串的內的模式看字串是否符合規範,就是資料驗證 替換文字 在字串內提取子字串 正規表示式語法 一.普通字元 符號表示,前面的乙個字元至少出現一次 1 runoo b可以匹配runoob,runooob,runoooob等 符號表示,前面的乙個字元可以出現0次或者一次或者多次 0 ...