python 正则表达式

原创 2015年11月21日 20:21:02

最近需要在网上下一些icon来用,一个一个的找太浪费时间了,所以需要研究一下网络爬虫。经过几天时间的研究,发现正则表达式是非常关键的部分。

入门的话看一下下面几个网站就可以上手了,不过要用好真是不容易。比如我这样匹配 “\bhttp://.+?.icon$”, 下面两个都能匹配上:

http://www.baidu.com//icons/dog.icon
http://www.baidu.com//icons/dog.jpe, http://www.baidu.com//icons/cat.icon

显然,第二行不是我要的结果。

所以要做一个好爬虫,任重而道远啊。

正则表达式学习

www.runoob.com
正则表达式30分钟入门教程
docs.python.org

使用正则表达式

导入re模块

#!/usr/bin/env python3
import re

使用方法

  • 不存编译结果

    result = re.match(pattern, string)
    print(result.group())
  • 存编译结果

    prog = re.compile(pattern)
    result = prog.match(string)

python每次匹配时,都需要将字符串模式编译成python内部模式。如果只匹配一次,则上面两种方式没有区别,但如果pattern需要多次使用的话,则用re.compile先编译好会节省重复编译的时间。

match, search的区别

  • match
    • 起始位置开始匹配
  • search
    • 扫描整个字符串并返回第一个成功的匹配

eg,

>> import re
>> print(re.match('com', 'http://www.baidu.com'))
 None
>> print(re.search('com', 'http://www.runoob.com'))
 <_sre.SRE_Match object; span=(18, 21), match='com'>
>> re.search('com', 'http://www.runoob.com').span()
 (18, 21)

re.M, re.I, re.S

详情 →_→ 这里

  • re.M
    • re.MULTILINE, 多行匹配
  • re.I
    • re.IGNORECASE
  • re.S
    • re.DOTALL
    • 匹配所有字符,包括换行符

替换

字符串前面的“r”

  • 告诉python这是个 raw_string, 不要转意“\”
  • 匹配”C:\Windows\System32”中的”C:\Windows”:

    >>> str = 'C:\\Windows\\System32'
    >>> pattern1 = r'[a-zA-Z]:\\Windows' # with "r"
    >>> res1 = re.match(pattern1, str)
    >>> res1.group()
    'C:\\Windows'
    
    >>> pattern = '[a-zA-Z]:\\\\'
    >>> res = re.match(pattern, str)
    >>> res = re.match(pattern, str)
    'C:\\Windows'

findall

先来看一个例子

#!/usr/bin/env python3

import re

s = 'http://www.baidu.com'

res = re.findall(r'http://((\w+?)\.\w+)\.\w+', s) 

print (res)

输出:

[('www.baidu', 'www')]

将上面 s 修改成下面这样:

s = 'http://www.baidu.com http://cn.bing.com'

res = re.findall(r'http://((\w+?)\.\w+)\.\w+', s) 

输出:

[('www.baidu', 'www'), ('cn.bing', 'cn')]

可见,final是这样工作的:

  • 最外面的 () 及其里面的 () 构成结果的一个tuple
  • 每个tuple由一个数组构成,数组的第一个元素匹配最外面的 (), 第二个元素匹配次级 (), 以此类推
  • 匹配结果是多个tuple构成的数组
版权声明:本文为博主原创文章,未经博主允许不得转载。

正则表达式快速入门(python示例)

正则表达式的作用我就不赘述了,首先讲解一下单个字符的匹配。 1、‘’.“(点):匹配除了(\n)之外的所有字符。 首先import re,以下的示例都默认已经导入了re包,不再另行说明。 string...
  • ali197294332
  • ali197294332
  • 2016年03月15日 22:19
  • 1096

[Python]网络爬虫(七):Python中的正则表达式教程

接下来准备用糗百做一个爬虫的小例子。 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容。 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的...
  • wxg694175346
  • wxg694175346
  • 2013年05月15日 13:29
  • 126756

正则表达式入门(java,python版本)

目录 正则表达式基础 正则表达式实现 正则表达式应用 本文目标快速让你知道真这个表达式是什么,对正则表达式的概念有基本的了解,并且能够在不同的编程语言中使用它。 正则表达式到底是什么 正则表达式,...
  • u013785951
  • u013785951
  • 2017年03月30日 20:53
  • 776

Python 正则表达式(常用函数)

下面介绍一些Python中常用的正则表达式处理函数。re.match()函数原型:match(pattern, string, flags=0) Try to apply the patter...
  • SeeTheWorld518
  • SeeTheWorld518
  • 2015年10月21日 12:28
  • 1327

Python 正则表达式 (附调试工具)

写在正文之前,正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。所以想学习好正则表达式,就需不断的尝试写出自己的表达式来验证想法。...
  • jimmy306
  • jimmy306
  • 2016年07月28日 14:18
  • 1314

Python下的正则表达式原理和优化笔记

Python下的正则表达式原理和优化笔记 摘要 本文旨在总结一些编写表达式的技巧和原理。鉴于介绍python中re模块的使用方法的文章太多。所以本文在基础方面都是略过,而在回溯原理和一些...
  • xutaoding
  • xutaoding
  • 2014年07月01日 13:54
  • 632

Python正则表达式:如何使用正则表达式

正则表达式(简称RE)本质上可以看作一个小的、高度专业化的编程语言,在Python中可以通过re模块使用它。使用正则表达式,你需要为想要匹配的字符串集合指定一套规则,字符串集合可以包含英文句子、e-m...
  • liuy_98_1001
  • liuy_98_1001
  • 2015年06月08日 18:22
  • 3360

Python正则表达式中文手册

Python正则表达式操作指南 原文出处:http://www.amk.ca/python/howto/regex/ 原文作者:A.M. Kuchling (amk@amk.ca)...
  • qianlong4526888
  • qianlong4526888
  • 2013年09月02日 20:25
  • 2227

Python——正则表达式(1)

本文介绍了Python正则表达式中的字符类[ ]和元字符点号 ' . ' ;介绍了特殊序列\w、\W、\d、\D、\s和\S;介绍了有重复功能的星号*、加号+、问号?以及{m,n}...
  • ggGavin
  • ggGavin
  • 2016年02月29日 17:02
  • 1982

Python正则表达式匹配各种标准形式整理

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表...
  • HHTNAN
  • HHTNAN
  • 2017年06月27日 13:50
  • 1292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python 正则表达式
举报原因:
原因补充:

(最多只允许输入30个字)