当前位置: 首页 > news >正文

分销网站制作条件购门网站建设

分销网站制作条件,购门网站建设,网站开发需要什么人才,网站开发后台 amp为什么要学习正则表达式 实际上爬虫一共就四个主要步骤#xff1a; 明确目标#xff1a;需清楚目标网站爬#xff1a;将所有的目标网站的内容全部爬下来取#xff1a;在爬下来的网站内容中去掉对我们没有用处的数据#xff0c;只留取我们需要的数据处理数据#xff1a;按…为什么要学习正则表达式 实际上爬虫一共就四个主要步骤 明确目标需清楚目标网站爬将所有的目标网站的内容全部爬下来取在爬下来的网站内容中去掉对我们没有用处的数据只留取我们需要的数据处理数据按照我们想要的方式存储和使用留取的数据我们在前面的案例里实际上都省略了第3步也就是“取”的步骤。因为我们down下了的数据是全部的网页这些数据很庞大并且很混乱其中大部分的东西是我们不关心的因此我们需要将之按我们的需要过滤和匹配出来。 那么对于文本的过滤和者规则的匹配最强大的就是正则表达式了。 那么什么是正则表达式 正则表达式又称规则表达式通常被用来检索、替换那些符合某个规则的文本。正则表达式是对字符串操作的一种逻辑公式就是用事先定义好的一些特定字符及这些特定字符的组合组成一个“规则字符串”这个“规则字符串”用来表达对字符串的一种过滤逻辑。给定一个正则表达式和另一个字符串我们可以达到如下的目的 给定的字符串是否符合正则表达式的过滤逻辑“匹配”通过正则表达式从文本字符串中获取我们想要的特定部分“过滤” 正则表达式规则 Python的re模块 在Python中我们可以使用内置的re模块来使用正则表达式。 有一点需要特别注意的是正则表达式使用对特殊字符进行黑底所以如果我们要使用原始字符串只需要加一个r前缀ri love\t\.\tpython re模块的一般使用步骤如下 使用compile()函数将正则表达式的字符串形式编译为一个Pattern对象通过Pattern对象提供的一系列方法对文本进行匹配查找获得匹配结果一个Match对象。最后使用Match对象提供的属性和方法获得信息根据需要进行其他操作。compile函数 compile函数用于编译正则表达式生成一个Pattern对象它的一般使用形式如下 #!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ mayiimport re# 将正则表达式编译成Pattern对象 pattern re.compile(\d)在上面我们已将一个正则表达式编译成Pattern对象接下来我们就可以利用pattern的一系列方法对文本匹配查找了。 Pattern对象的一些常用方法主要有 match()方法从起始位置开始查找一次匹配search()方法从任何位置开始查找一次匹配findall()方法全部匹配返回列表finditer()方法全部匹配返回迭代器split()方法分割字符串返回列表sub()方法替换match()方法 match()方法用于查找字符串的头部也可以指定起始位置它是一次匹配只要找到了一个匹配的结果就返回而不是查找所有匹配的结果。它的一般使用形式如下 match(string[, pos[, endpos]]) 其中string是待匹配的字符串pos和endpos是可选参数指定字符串的起始和终点位置默认值分别是0和len(string)。因此当你不指定pos和endpos时match()方法默认匹配字符串的头部。 当匹配成功时返回一个Match对象如果没有匹配上则返回None。 import repattern re.compile(r\d) # 用于匹配至少一个数字 m pattern.match(one12twothree34four) # 查找头部没有匹配print m None m pattern.match(one12twothree34four, 2, 10) # 从e的位置开始匹配没有匹配print(m) None m pattern.match(one12twothree34four, 3, 10) # 从1的位置开始匹配正好匹配print(m) # 返回一个 Match 对象 _sre.SRE_Match object; span(3, 5), match12 print(m.group(0)) # 可省略 0 12print(m.start(0)) # 可省略 0 3print(m.end(0)) # 可省略 0 5print(m.span(0)) # 可省略 0 (3, 5)在上面当匹配成功时返回一个Match对象其中 group([group1,...])方法用于获得一个或多个分组匹配的字符串当要获得整个匹配的子串时可直接使用group()或group(0)start([group])方法用于获取分组匹配的子串在整个字符串中的起始位置子串第一个字符的索引参数默认值为0end([group])方法用于获取分组匹配的子串在整个字符串中的结束位置子串最后一个字符的索引 1参数默认值为0span([group])方法返回(start(group), end(group))再看一个例子 import repattern re.compile(r([a-z]) ([a-z]), re.I) # re.I 表示忽略大小写m pattern.match(Hello World Wide Web) print(m) # 匹配成功返回一个 Match 对象 _sre.SRE_Match object; span(0, 11), matchHello World print(m.group(0)) # 返回匹配成功的整个子串 Hello World print(m.span(0)) # 返回匹配成功的整个子串的索引 (0, 11) print(m.group(1)) # 返回第一个分组匹配成功的子串 Hello print(m.span(1)) # 返回第一个分组匹配成功的子串的索引 (0, 5) print(m.group(2)) # 返回第二个分组匹配成功的子串 World print(m.span(2)) # 返回第二个分组匹配成功的子串 (6, 11) print(m.groups()) # 等价于 (m.group(1), m.group(2), ...) (Hello, World) print(m.group(3)) # 不存在第三个分组 Traceback (most recent call last):File stdin, line 1, in module IndexError: no such groupsearch()方法 search()方法用于查找字符串的任何位置它也是一次匹配只要找到了一个匹配的结果就返回而不是查找所有匹配的结果它的一般使用形式如下 search(string[, pos[, endpos]]) 其中string是待匹配的字符串pos和endpos是可选参数指定字符串的起始和终点位置默认值分别是0和len(string)。 当匹配成功时返回一个Match对象如果没有匹配上则返回None。 如下例子 import repattern re.compile(\d)m pattern.search(one12twothree34four)print(m) _sre.SRE_Match object; span(3, 5), match12print(m.group()) 12m pattern.search(one12twothree34four, 10, 30)print(m) _sre.SRE_Match object; span(13, 15), match34print(m.group()) 34print(m.span()) (13, 15)再看一个例子 #!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ mayiimport re# 将正则表达式编译成Pattern对象 pattern re.compile(r\d)# 使用search() 查找匹配的子串不存在匹配的子串时返回None m pattern.search(hello 123 456 789) # 若这里使用match()返回Noneif m:print(matching string:, m.group())print(position:, m.span())执行结果 matching string: 123 position: (6, 9)findall()方法 上面的match()和search()方法都是一次匹配只要找到了一个匹配的结果就返回。然而在大多数时候我们需要搜索整个字符串获得所有匹配的结果。 findall()方法的使用形式如下 findall(string[, pos[, endpos]]) 其中string是待匹配的字符串pos和endpos是可选参数指定字符串的起始和终点位置默认值分别是0和len(string)。 findall()以列表形式返回全部能匹配的子串如果没有匹配成功则返回一个空列表。 如下 import repattern re.compile(r\d) # 匹配数字res1 pattern.findall(hello 123 456 789)res2 pattern.findall(one1two2three3four4, 0, 16)print(res1) [123, 456, 789]print(res2) [1, 2, 3]再看一个例子 import repattern re.compile(r\d\.\d) # 匹配小数res pattern.findall(3.1415926, big, 110, 95.5)print(res) [3.1415926, 95.5]finditer()方法 finditer()方法的行为跟findall()的行为类似也是搜索整个字符串获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果Match对象的迭代器。 如下 #!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ mayiimport repattern re.compile(r\d)res_iter1 pattern.finditer(hello 123 456 789) res_iter2 pattern.finditer(one1two2three3four4, 0, 16)print(res_iter1) print(res_iter2)print(res_iter1......) for m1 in res_iter1:print(matching string:{}, position:{}.format(m1.group(), m1.span()))print(res_iter2......) for m2 in res_iter2:print(matching string:{}, position:{}.format(m2.group(), m2.span()))执行结果 callable_iterator object at 0x00ADF7F0 callable_iterator object at 0x00ADF230 res_iter1...... matching string:123, position:(6, 9) matching string:456, position:(10, 13) matching string:789, position:(14, 17) res_iter2...... matching string:1, position:(3, 4) matching string:2, position:(7, 8) matching string:3, position:(13, 14)split()方法 spilt()方法按照能够匹配的子串将字符串分割后返回列表它的使用形式如下 split(string[, maxsplit]) 其中maxsplit用于指定最大分割次数不指定将全部分割。 如下   import repattern re.compile(r[\s\,\;])print(pattern.split(a,b;; c d)) [a, b, c, d]sub()方法 sub()方法用于替换。它的使用形式如下 sub(repl, string[, count]) 其中repl可以是字符串也可以是一个函数 如果repl是字符串则会使用repl去替换字符串每一个匹配的子串并返回替换后的字符串另外repl还可以使用id的形式来引用分组但不能使用编号0如果repl是函数这个方法应当只接受一个参数Match对象并返回一个字符串用于替换返回的字符串中不能再引用分组count用于指定最多替换次数默认全部替换如下 #!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ mayiimport repattern re.compile(r(\w) (\w)) # \w: [A-Za-z0-9]string hello 123, hello 456print(pattern.sub(hello world, string)) # 我是分割线 print(* * 30)print(pattern.sub(r\2 \1, string))# 我是分割线 print(* * 30)def func(m):return hi m.group(2)print(pattern.sub(func, string))# 我是分割线 print(* * 30)# 最多替换一次 print(pattern.sub(func, string, 1))执行结果 hello world, hello world ****************************** 123 hello, 456 hello ****************************** hi 123, hi 456 ****************************** hi 123, hello 456匹配中文 在某些情况下我们想匹配文本中的汉字中文的unicode编码范围主要在[u4e00-u9fa5]这里说主要是因为这个范围并不完整比如没有包括全角中文标点不过在大部分情况下应该是够用的。 例如要想把字符串s 您好世界。hello world!中的中文提取出来可以这么做 #!/usr/bin/python3 # -*- coding:utf-8 -*- __author__ mayiimport restring 你好世界。hello world!pattern re.compile(r[\u4e00-\u9fa5])res pattern.findall(string)print(res)执行结果 [你好, 世界]转载于:https://www.cnblogs.com/mayi0312/p/7206343.html
http://www.zqtcl.cn/news/625550/

相关文章:

  • 做网站点做关于什么的网站
  • 网站建设服务费税率多少汕头模板建站流程
  • 网站 建设实验小结做淘宝客优惠券网站还是APP赚钱
  • 付银行的网站建设费的会计科目网站建设前端
  • 做网站题材海南网站建设软件
  • 门户网站建设 考核从零开始学做网站cdsn
  • 百胜网站建设秀屿区建设局网站
  • 公司招聘做哪家网站建筑网站开发
  • 网站建设文案详情一条龙平台
  • 四站合一网站建设公司权威的手机网站制作
  • 自主网站建站上海金瑞建设集团网站
  • 阿里云网站建设方案书中山市公司企业网站的选择
  • 网站建设管理工作制度知名网站建设加盟合作
  • 网站定制公司推荐wordpress 插件 封面
  • 企业手机网站建设行情做外贸哪个网站比较好2017
  • 专业网站制作电话软件推广
  • 免费建站系统博客海外网站搭建
  • 网站建设与制作视频教学站酷网图片
  • 网站开发还有哪些万维网申请网站域名
  • 做网站费用上海判断网站做的好坏
  • 有了域名和空间怎么建网站哪些公司需要网页电商设计师
  • 网站开站备案深圳创业补贴10万
  • 圆通我做网站拉上海建站系统
  • 对于做网站有什么要求新闻发布会视频
  • 网站建设专业就业前景成都房产信息网 官网
  • 西宁网站建设公司排行网站查询域名ip解析
  • 柳州企业网站开发公司如何做网站首页图
  • 刷赞网站空间免费深圳网站制作公司排名
  • 网站内部优化策略获取网站的路径
  • 网站群 优点今天西安最新通告