首页 > 编程语言 >python数据提取-正则表达式

python数据提取-正则表达式

时间:2023-11-18 19:33:43浏览次数:39  
标签:提取 re python pattern list 正则表达式 html 匹配 findall

1.正则表达式
  (1)re的findall()方法
import re
r_list = re.findall('AB', 'ABCABDDGAAGDSGSDG') #后匹配前
print(r_list)
#输出:['AB', 'AB']

  (2)也可以写作下面
import re
pattern = re.compile('AB')
r_list = pattern.findall('ABCABDDGAAGDSGSDG')
print(r_list)

2.常用元字符
  .      任意一个字符(不包括\n)
  \d    一个数字
  \s    空白字符
  \S    非空白字符
  []     包含[]内容
  *     出现0次或多次
  +     出现1次或多次
  \w+  普通字符出现一次或多次
  匹配任意一个字符的正则表达式:
(1)使用[\s\S]
pattern = re.compile('[\s\S]')
result = pattern.findall(html)
(2)使用re.S
pattern = re.compile('.‘,re.S)
result = pattern.findall(html)

re模块使用流程:
  (1)方法1
r_list = re.findall('正则表达式',html,re.S)
  (2)方法2
pattern = re.compile('正则表达式',re.S)
r_list = pattern.findall(html)

使用findall()方法得到的结果一定是列表,re.S作用为正则表达式元字符,. 可匹配\n在内的所有字符

3.贪婪匹配和非贪婪匹配
  (1)贪婪匹配:在整个表达式匹配成功的前提下,尽可能多匹配 * + ?
      表达式: .* .+ .?
  (2)非贪婪匹配:在整个表达式匹配成功的前提下,尽可能多匹配 * + ?
      表达式:.*? .+? .??

例子:
import re
html = '''
<div><p>XXXXXXXXX</div></p>
<div><p>XXXXXXXXXX</div></p>
'''
pattern = re.compile('<div><p>.*?</div></p>',re.S)
r_list = pattern.findall(html)
print(r_list)

pattern = re.compile('<div><p>(.*?)</div></p>',re.S)
r_list = pattern.findall(html)
print(r_list)
  #只匹配XXX内容

##贪婪匹配</div></p>也会被认为任意字符,所有使用非贪婪匹配解决上面匹配特定内容问题

例子:
import re
html = 'A B C D'
pattern = re.compile('\w+\s+\w+',re.S)
r_list = pattern.findall(html)
print(r_list)
输出:['A B', 'C D']

import re
html = 'A B C D'
pattern = re.compile('(\w+)\s+\w+',re.S)
r_list = pattern.findall(html)
输出:['A', 'C']

总结:
在网页中想抓取什么内容,就在正则表达式中此位置加()
匹配时先按照整体正则匹配,然后再提取分组()中内容
2及以上分组(),则结果中以元组形式显示[(),(),()]

 

标签:提取,re,python,pattern,list,正则表达式,html,匹配,findall
From: https://www.cnblogs.com/huchao12/p/17840971.html

相关文章

  • python数据持久化(mysql+CSV+mongodb)
    1.创建数据库createdatabasemydbcharsetutf8;usemydb;createtablemydb(namevarchar(100),starvarchar(200),timevarchar(100))charset=utf8;2.使用pymysql模块在mytab表中插入一条表记录importpymysql#(1)创建数据库连接对象db=pymysql.connect('localhost','roo......
  • 爬取python网站下载地址,并下载最新文件
    1.下载https://www.python.org/ftp/python/最新版本python文件  一个下载网站,查看最新的,然后下载对应版本文件(如,列出python版本,并下载https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz)。 代码如下:importrequestsfromlxmlimportetreeimporttimeimportr......
  • python的SSH/ftp操作
    1.python连接ssh并执行命令//安装paramiko模块:pipinstallparamiko(1)执行单条命令importparamikossh=paramiko.SSHClient()#创建一个ssh的客户端,用来连接服务器know_host=paramiko.AutoAddPolicy()#创建一个ssh的白名单ssh.set_missing_host_key_policy(know_hos......
  • python使用wandb login报错
    python使用wandblogin报错问题描述wandb是一个可视化在pipinstallwandb后使用importwandb或者运行命令wandblogin产生如下报错:cannotimportname'COMMON_SAFE_ASCII_CHARACTERS'解决方法报错可能是由于charset_normalizer模块的版本问题引起的。卸载重装:pipuninst......
  • Notepad++正则表达式语法
    转自:https://www.cnblogs.com/kekec/p/5255475.html注意:Notepad++正则表达式字符串最长不能超过69个字符\转义字符如:要使用“\”本身,则应该使用“\”\tTab制表符注:扩展和正则表达式都支持\r回车符CR注:扩展支持,正则表达式不支持\n换行符LF注:扩展支持,正......
  • Python 潮流周刊#27:应该如何处理程序的错误?
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,大部分为英文。本周刊开源,欢迎投稿。另有电报频道作为副刊,补充发布更加丰富的资讯。......
  • Python十道基础编程题
    1.输入日期,判断这一天是这一年的第几天importdatetimedefday_of_year():year=eval(input('请输入年份:'))month=eval(input('请输入月份:'))day=eval(input('请输入天:'))date1=datetime.date(year,month,day)date2=datetime.date......
  • Python 中的经典类新式类
    要知道经典类和新式类的区别,首先要掌握类的继承类的继承的一个优点就是减少代码冗余广度优先和深度优先,这主要是在多类继承的时候会使用到经典类和新式类的主要区别就是类的继承的方式经典类遵循深度优先的规则,新式类遵循广度优先的规则。至于什么是深度优先什么是广度优先,可......
  • Python中四大高阶函数,你认识几个
    1.匿名函数defname(a,b):returna+bf=lambdaa,b:a+bprint(f(15,15))2.map函数第一个参数接收一个函数名,第二个参数接收一个可迭代对象,利用map,lambda表达式将所有偶数元素加100deffun(a,b):returna+bret=map(fun,[1,2,3],[4,5,6])print(list(ret))3.sor......
  • python模拟题二
    1. (10.)   实现以下功能:从键盘输入4个数字,各数字采用空格分隔,对应变量x0,y0,xl,y1.计算两点(x0,y0)和(x1,y1)之间的距离,屏幕输出这个距离,例如:键盘输入:0135   屏幕输出:5.00  提示:importmathnums=input("用空格分隔的四个数字:")#利用nums.spl......