文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python 关于正则表达式re

2023-06-02 00:11

关注

  1.正则表达式 re

  典型的搜索和替换操作要求您提供与预期的搜索结果匹配的确切文本。虽然这种技术对于对静态文本执行简单搜索和替换任务可能已经足够了,但它缺乏灵活性,若采用这种方法搜索动态文本,即使不是不可能,至少也会变得很困难。

  通过使用正则表达式,可以:

  - 测试字符串内的模式。

  例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。

  - 替换文本。

  可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

  - 基于模式匹配从字符串中提取子字符串。

  可以查找文档内或输入域内特定的文本。

  可以使用正则表达式来搜索和替换标记。

  使用正则表达式的优势:

  正则表达式是用来简洁表达一组字符串的表达式

  正则表达式是一种通用的字符串表达框架

  正则表达式是一种针对字符串表达“简洁”和“特征”思想的工具

  正则表达式可以用来判断某字符串的特征归属

  正则表达式在文本处理中十分常用:

  同时查找或替换一组字符串

  匹配字符串的全部或部分(主要)

  1.1 正则表达式语法

  正则表达式语法由字符和操作符构成:

  常用操作符

  . 表示任何单个字符

  [ ] 字符集,对单个字符给出取值范围 ,如[abc]表示a、b、c,[a‐z]表示a到z单个字符

  [^ ] 非字符集,对单个字符给出排除范围 ,如[^abc]表示非a或b或c的单个字符

  * 前一个字符0次或无限次扩展,如abc* 表示 ab、abc、abcc、abccc等

  + 前一个字符1次或无限次扩展 ,如abc+ 表示 abc、abcc、abccc等

  ? 前一个字符0次或1次扩展 ,如abc? 表示 ab、abc

  | 左右表达式任意一个 ,如abc|def 表示 abc、def

  {m} 扩展前一个字符m次 ,如ab{2}c表示abbc

  {m,n} 扩展前一个字符m至n次(含n) ,如ab{1,2}c表示abc、abbc

  ^ 匹配字符串开头 ,如^abc表示abc且在一个字符串的开头

  $ 匹配字符串结尾 ,如abc$表示abc且在一个字符串的结尾

  ( ) 分组标记,内部只能使用 | 操作符 ,如(abc)表示abc,(abc|def)表示abc、def

  \d 数字,等价于[0‐9]

  \w 单词字符,等价于[A‐Za‐z0‐9_]

  1.3 正则表达式re库的使用

  调用方式:import re

  re库采用raw string类型表示正则表达式,表示为:r’text’,raw string是不包含对转义符再次转义的字符串;

  1.4 re库的主要功能函数:

  re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象

  re.search(pattern, string, flags=0)

  re.match() 从一个字符串的开始位置起匹配正则表达式,返回match对象

  re.match(pattern, string, flags=0)

  re.findall() 搜索字符串,以列表类型返回全部能匹配的子串

  re.findall(pattern, string, flags=0)

  re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型

  re.split(pattern, string, maxsplit=0, flags=0)

  re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象

  re.finditer(pattern, string, flags=0)

  re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

  re.sub(pattern, repl, string, count=0, flags=0)

  flags : 正则表达式使用时的控制标记:

  re.I --> re.IGNORECASE : 忽略正则表达式的大小写,[A‐Z]能够匹配小写字符

  re.M --> re.MULTILINE : 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始

  re.S --> re.DOTALL : 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

  1.6 re库的另一种等价用法(编译)

  regex = re.compile(pattern, flags=0):将正则表达式的字符串形式编译成正则表达式对象

  1.7 re 库的贪婪匹配和最小匹配

  .* Re库默认采用贪婪匹配,即输出匹配最长的子串

  *? 只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配

  2. 实例-淘宝商品比价定向爬虫

  爬取网址:https://s.taobao.com/search?q=书包&js=1&stats_click=search_radio_all%25

  爬取思路:

  提交商品搜索请求,循环获取页面

  对于每个页面,提取商品名称和价格信息

  将信息输出到屏幕上

  # 导入包

  import requests

  import re

  提交商品搜索请求,循环获取页面

  def getHTMLText(url):

  """

  请求获取html,(字符串)

  :param url: 爬取网址

  :return: 字符串

  """

  try:

  # 添加头信息,

  kv = {郑州妇科医院 http://m.zyfuke.com/

  'cookie': 'thw=cn; v=0; t=ab66dffdedcb481f77fd563809639584

  'user-agent': 'Mozilla/5.0'

  }

  r = requests.get(url, timeout=30, headers=kv)

  # r = requests.get(url, timeout=30)

  # print(r.status_code)

  r.raise_for_status()

  r.encoding = r.apparent_encoding

  return r.text

  except:

  return "爬取失败"

  对于每个页面,提取商品名称和价格信息

  def parsePage(ilt,html):

  try:

  plt = re.findall(r'\"view_price\"\:\"[\d\.\d]*\"',html)

  tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)

  for i in range(len(plt)):

  price = eval(plt[i].split(':')[1])

  title = eval(tlt[i].split(':')[1])

  ilt.append([price,title])

  except:

  print('')

  将信息输出到屏幕上

  def PrintGoodsList(ilt):

  tplt = '{:4}\t{:8}\t{:16}'

  print(tplt.format('序号','价格','商品名称'))

  count = 0

  for g in ilt:

  count = count + 1

  print(tplt.format(count,g[0],g[1]))

  def main():

  goods = input('please input the goods:')

  depth = 3

  start_url = 'https://s.taobao.com/search?q='

  infoList = []

  for i in range(depth):

  try:

  url = start_url+goods+'&s='+str(44*i)

  html = getHTMLText(url)

  parsePage(infoList,html)

  except:

  continue

  PrintGoodsList(infoList)

  main()

  

python 关于正则表达式re

  

python 关于正则表达式re
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯