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 ...