__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<value>\d+)',double,s))
#这两个是一样的这就是(?P<value>)的起别名
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='<div class="info-middle" style="background-color: rgb(255, 248, 234);">Huan An Xi Lu 277 Hao </div>'
pattern=re.compile('<div class="info-middle"[\w\W]*?;">(.*?) </div>',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)