# -*- coding: UTF-8 -*-
import re
#正则表达式各
"""
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 '\\t')匹配相应的特殊字符。
"""
s = "我是百度http://www.baidu.com/news.html你是谁呢,我是谷歌不是百度"
# rearch 扫描字符串返回第一个成功匹配的对象,否则返回None
res = re.search('百度',s)
res.group()
#match值匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,返回None
re0 = re.match('我是',s)
#re.match与re.search的区别
# findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
res1 = re.findall('百度',s)
#split 按照能匹配到的字符串将按照字符串分割返回列表
r = re.split('w',s)
#^ 匹配以 我是 为开头的字符串
res2 = re.search('^我是...',s)
res2.group()
#$ 匹配以百度为结尾的字符串
res3 = re.search('(...百度$)',s)
res3.group()
# '.'可开匹配除换行符(\n)的任意字符
s1 = "我是\tleo"
res4 = re.search('(.....)',s1)
res4.group()
"""
\b匹配一个单词边界,也就是指单词和空格间的位置。
'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
表示字母数字与非字母数字的边界, 非字母数字与字母数字的边界
re.split('123\\b','==123!! abc123. 123. 123abc. 123')
\本身需要通过\进行转义,否则将看作字符串本身
\B 同\b 相反,匹配非单词边界
"""
s2 = 'heollao my ename is loe'
s3 = re.split('123\\b','==123!! abc123. 123. 123abc. 123')
res5 = re.split(' \\b',s2)
res6 = re.split('o\\B',s2)
#\d 匹配任意数字 等价0~9, \D匹配任意非数据
s4 = 'hel2lo wor3ld'
re1 = re.findall('\\D',s4)
#[...] 用来表示一组字符的集合,对匹配的字符,限定可选的范围的一个值
st1 = '0755--3874289深圳固话号码hello world'
res7 = re.match(r'\d\d\d\d[-/\']', st1)
res8 = re.match(r'[0-9][0-9][0-9][0-9][-/\']', st1)
print(res7)
st = 'wWw.baidu.com' #findall 函数 re.I 忽略字符串大小写
res10 = re.findall(r'w*.baidu.com',st, re.I)
print(res10)
s = 'leo name is leoo not 456 leo1 eo23eoleo'
res = re.findall('eo',s) # 返回['eo', 'eo', 'eo']
res1 = re.findall('eo{2}',s) # 返回['eoo', 'eoo']
res2 = re.findall('(?:eo){1,3}',s) # 返回 ['eo', 'eo', 'eo', 'eoeo', 'eo']
#(?:eo){1,3} 代表eo eoeo eoeoeo 在字符串中是否有出现并返回在列表中 {1,3} 标识eo整体重复的次数
res4 = re.findall('[0-9]{1,3}',s)# [0-9]{1,3} 可以匹配一到三个数字 ['456', '1', '23']
res5 = re.findall('[0-9]{2}',s) # [0-9]{2}连续出现两个数字 ['45', '23']
res5 = re.findall('[0-9]+',s) # [0-9] 匹配出现一次或多次
res6 = re.findall('[a-z0-9A-Z]{2}',s) #[a-z0-9A-Z]{2} 匹配连续出现字母或数字的字符串,并返回列表
s = 'leoeo name is leoo not 456 leo1 eo23eoleo'
res3 = re.findall('(eo){1,3}',s) #(eo){1,3}配 eo字符串,{1,3}不起到任何作用
#url 案例
String = "baidu 的网页地址为 https://www.baidu.com, Google 的网址为 http://google.com 自己的网址 http://leo.com/ab12.html"
print(re.findall('https?://(?:w*\.)?\w+\.com(?:/\w+\.html)?',String))