p109-
正则表达式
- \d+ 匹配整数
- \d+\.\d+ 小数
- \d+\.?\d* 小数或者整数 ? 表示要么出现1次要么不出现 ,* 出现不出现都可,但是有缺陷,比如可以匹配12.
- 改进 \d+(\.\d+)? 小括号是分组,分组后面问号,可以表示要么出现,要么不出现,
- ^1[3-9]\d{9}$ 判断手机号码 前面^ 后面$ 就可以严格约束
贪婪匹配
- 量词范围允许的情况下,尽量多的匹配内容{3,9} 有9次的就匹配9次
- \d{3,}6 会匹配最后一个6的位置就不匹配了 124556845656544 ,先匹配所有,然后往回找到6
非贪婪匹配
- \d{3,}?6 加个?后就不贪婪
- .*x 表示匹配任意字符,任意多次数 遇到最后一个x才停下来
- .*?x 表示匹配任意字符 任意多次数 但是一旦遇到x就听下来
- 123654647846 在.*6 规则下匹配1个结果 ,但是在 .*?6下就匹配3个结果 :1236 546 47846
转义字符\
-
原本有特殊意义的字符 ,要匹配它本身的时候要转义,但是放在字符组中就只能表示它自己
-
比如 [.()*?+] 就只匹配 中括号内的单个字符,会取消它的特殊意义
-
[1]\d{14}(\d{2}([0-9]|x))?$ 匹配15位或者18位的身份证号
import re
import re
result = re.findall('\d+','121asdf125454reewr')
print(result) #['121', '125454']
result = re.search('\d+','121asdf125454reewr')
print(result.group()) #121
result = re.search('\d+8','121asdf125454reewr') #匹配以8结尾的数字
print(result) #None
result = re.search('\d+8','121asdf125454reewr')
if result:print(result) # 不返回
import re
result = re.findall('1\d','121asdf125454reewr')
print(result) # ['12', '12']
result = re.findall('1(\d)','121asdf125454reewr')
print(result) # ['2', '2']
result = re.search('1(\d)','121asdf125454reewr')
print(result.group()) # 12
# findall 如果正则表达式有括号,就只显示括号里的内容
result = re.findall('1(\d)\d','131asdf125454reewr')
print(result) # ['3', '2']
result = re.findall('1(\d)(\d)','131asdf125454reewr')
print(result) # [('3', '1'), ('2', '5')]
#search 只匹配第一个找到的结果,并按照括号内容挨个显示
result = re.search('1(\d)(\d)','131asdf125454reewr')
if result:
print(result.group(1)) #3
print(result.group(2)) #1
#获取标题内容
str1 = '<h1>thisisatitle</h1>'
ret = re.findall('<\w+>(\w+)</\w+>',str1)
print(ret) #['thisisatitle']
ret = re.search('<\w+>(\w+)</\w+>',str1)
print(ret.group(1)) #thisisatitle
#获取加法并计算结果
str1 = '3-1*(4+5)'
ret = re.search('(\d+)[+](\d+)',str1)
print(int(ret.group(1))+int(ret.group(2))) #9
#获取最近上映的电影和日期,先找到网页,保存html文件
with open('douban.html',encoding='utf-8') as f:
result = f.read()
ret = re.findall('class="">(.*?)</a>\s*<span class="icon">\s*</span>\s*</h3>\s*<ul>\s*<li class="dt">(.*?)</li>',result)
print(ret) #[('疯狂动物城', '07月24日'), ('多力特的奇幻冒险', '07月24日'),...........
1-9 ↩︎