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. 1-9 ↩︎

posted on 2020-07-21 20:23  94小渣渣  阅读(121)  评论(0编辑  收藏  举报