Python正則練習

2021-09-25 15:42:06 字數 4115 閱讀 9300

__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次或無限次 ...