__author__ = '***'
import re
print(re.match('www','www.runoob.com'))
print(re.match('www','www.runoob.com').span())
print(re.match('com','www.runoob.com'))
line="cats are smarter than dogs"
# #.* 表示任意匹配除換行符(\n、\r)之外的任何單個或多個字元
matchobj=re.match(r'(.*)are (.*?).*',line,re.m|re.i)
if matchobj:
print("matchobj.group():",matchobj.group())
print("matchobj.group(1):",matchobj.group(1))
print("matchobj.group(2):",matchobj.group(2))
else:
print("no match!!")
print(re.search('www','www.runoob.com').span())
print(re.search('com','www.runoob.com').span()) #span()從0開始
# print(re.search('www','www.runoob.com').groups())
print(re.search('com','www.runoob.com').group(0))
line="cats are smarter than dogs"
searchobj = re.search( r'(.*) are (.*?) .*', line, re.m|re.i)
if searchobj:
print("searchobj.group():",searchobj.group())
print("searchobj.group(1):",searchobj.group(1))
print("searchobj.group(2):",searchobj.group(2))
else:
print("nothing found!!")
line="cats are smarter than dogs"
matchobj=re.match(r'dogs',line,re.m|re.i)
if matchobj:
print("match-->matchobj.group():",matchobj.group())
else:
print("no match!!")
matchobj=re.search(r'dogs',line,re.m|re.i)
if matchobj:
print("search-->matchobj.group():",matchobj.group())
else:
print("no match!!")
phone="2004-959-559 # 這是乙個**號碼"
#刪除注釋
num=re.sub(r'#.*$',"",phone)#以#號開頭任意字元
print("**號碼:",num)
# #移除非數字的內容
num=re.sub(r'\d',"",phone)
print("**號碼:",num)
#將匹配的數字乘以2
def double(matched):
value=int(matched.group('value'))
return str(value*2)
s='a23g4hfd567'
print(re.sub('(?p\d+)',double,s))
#這兩個是一樣的這就是(?p)的起別名
def double(matched):
value=int(matched.group(1))
return str(value*2)
s='a23g4hfd567'
print(re.sub('(\d+)',double,s))
#compile函式
pattern=re.compile(r'\d+')#用於匹配至少乙個數字
m=pattern.match('one12twothree34four')#查詢頭部,沒有匹配
print(m)
m=pattern.match('one12twothree34four',2,10)#從'e'的位置開始匹配,沒有匹配,下標0開始
print(m)
m=pattern.match('one12twothree34four',3,10)#從'1'的位置開始匹配,正好匹配
print(m)
print(m.group(0))
print(m.start(0))
print(m.end(0))
print(m.span(0))#span就是位置,匹配的位置頭和尾的下標,但是總感覺尾部的下標多一位
#例項pattern=re.compile(r'([a-z]+) ([a-z]+)',re.i)#中間的空格很重要
m=pattern.match('hello world wide web')
print(m) #匹配成功,返回乙個match物件
print(m.group(0))#返回匹配成功的整個子串
print(m.span(0))#返回匹配成功的整個子串的索引
print(m.group(1))#返回第乙個分組匹配成功的子串
print(m.span(1))#返回第乙個分組匹配成功的子串的索引
print(m.group(2))#返回第二個分組匹配成功的子串
print(m.span(2))#返回第二個分組匹配成功的子串索引
print(m.groups())#等價於(m。group(1),m.group(2),...)
print(m.group(3))#不存在第三個分組
#findall 在字串中找到正規表示式所匹配的所有子串,並返回乙個列表,如果沒有找到匹配的則返回空列表
#注意:match和search是匹配一次findall匹配所有
# 例項:
pattern=re.compile(r'\d+')#查詢數字
result1=pattern.findall('runoob 123 google 456')
result2=pattern.findall('run88oob123google456',0,10)
print(result1)
print(result2)
# re.finditer 和findall一樣,但是返回的是個迭代器
it=re.finditer(r"\d+","12a32bc43jf3")
for match in it:
print(match.group())
# re.split split方法按照能夠匹配的子串將字串分割後返回列表,
# 例項
print(re.split('\w+','runoob, runoob ,runoob.'))
print(re.split('(\w+)',' runoob, runoob, runoob.'))
print(re.split('\w+',' runoob, runoob ,runoob.',1))
print(re.split('a*','hello world'))
test='huan an xi lu 277 hao
'pattern=re.compile('(.*?)
',re.s)
map_address=re.findall(pattern,test)
print(map_address)
test1='content: createinfowindow('', "4/f, 147k argyle street, kowloon, hong kong"),'
pattern=re.compile('content: createinfowindow.*?,(.*?)\)',re.s)#括號前加轉義符號
map_address=re.findall(pattern,test1)
print(map_address)
Python正則練習貓眼電影
不知道做什麼專案,跟著練一下,先熟練requests吧,scrapy放幾天,練下正則,爬一下貓眼電影top100寫入csv檔案,明後天寫ip 池的 import requests import re import time defgethtml url header mojo trace id 2 ...
python正則練習 計算器
1 實現加減乘除及拓號優先順序解析 2 使用者輸入帶有加減乘除小括號的複雜運算公式後,必須自己解析裡面的 符號和公式,運算後得出結果,結果必須與真實的計算器所得出的結果一致 coding utf 8 import re def check string 檢查是否有其他特殊字元字母,檢查表示式合法性 ...
Python正規表示式練習
表示匹配任意字元,除了換行符,當re.dotall標記被指定時,則可以匹配包括換行符的任意字元。import re a xy123 b re.findall x.a c re.findall x.a print b print c 輸出結果 xy12 xy1 的使用舉例 匹配前乙個字元0次或無限次 ...