正则表达式

python 使用正则表达式(re)来进行匹配引擎搜索

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”

关于正则表达式,必须先学会它的元字符

元字符 : ^  $  *  +  ?  { }  [ ]  |  ( )  \

.  匹配除\n(换行符)以外的任何字符,若指定flag DOTALL,则匹配任意字符,包括换行

s = re.findall('b...u', 'www.baidu.com www')
>>> ['baidu']

^  匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)

s = re.findall('^w.w', 'www.baidu.com wWw')
>>> ['www']

$  匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以

s = re.findall('w.w$', 'www.baidu.com wWw')
>>> ['wWw']

*  匹配*号前的字符0次或多次

s = re.findall('abc*', 'abccccccc')
>>> ['abcccccc']
s = re.findall('abc*', 'ab')
>>> ['ab']

+   匹配前一个字符1次或多次

s = re.findall('abc+', 'abccccccc')
>>> ['abcccccc']

?   匹配前一个字符1次或0次

s = re.findall('abc?', 'abccccccc')
>>> ['abc']

{n}  匹配前一个字符n次,即前一个字符至少出现n次

s = re.findall('abc{2}', 'abccccccc')
>>> ['abcc']

{n,m}  匹配前一个字符n到m次

s = re.findall('abc{2,3}', 'abccccccc')
>>> ['abccc']

|  匹配|左或|右的字符

s = re.findall('abc|ABC', 'abcABC')
>>> ['abc', 'ABC']

()   提取括号中的内容

s = re.findall('(bai)', 'www.baidu.com')
>>> ['bai']

[ ] 字符集:1、[ab] 取a或b 2、字符集里的符号没有特殊的意义 3、尖角号^取反 4、选择出某种元素

# 1、[] 里面的元素取其一
s = re.findall('[aid]', 'www.baidu.com')
>>>['a', 'i','d']
# 2、消除符号的特殊意义
s = re.findall('[*]', 'abccccccc*')
>>>['*']
# 3、取反
s = re.findall('[^abc]', 'abcABC')
>>>['A', 'B', 'C']
# 4、选择元素(数字或字母)
s = re.findall('[a-z]', 'ab123c41d2ABeC')
>>>['a', 'b', 'c', 'd', 'e']

\   反斜杠后边跟元字符去除特殊功能,反斜杠后边跟普通字符实现特殊功能

通用字符

\A    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
\Z 匹配字符结尾,同$
\D 匹配非数字
\S 匹配任何非空白字符
\W 匹配非[A-Za-z0-9]
\d 匹配数字0-9,十进制数字
\w 匹配[A-Za-z0-9],匹配任一字母、数字、下划线
\s 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'

模式修正符,一般放在最后位置

I  re.I   不区分大小写

M re.M 多行匹配,改变'^'和'$'的行为

S re.S  点任意匹配模式,改变'.'的行为

常用的匹配语法

re.findall()  # 完全匹配,把所有匹配到的字符放到以列表中的元素返回
re.findall('com','www.baidu.com map.baidu.com')
>>> ['com', 'com'] re.match() # 从头开始匹配
re.match('com','www.baidu.com map.baidu.com')
>>> None re.search() # 搜索匹配,仅返回一个结果;通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
re.search('com','www.baidu.com map.baidu.com').group()
>>> com re.split() # 按照能够匹配的子串将字符串分割后返回列表。maxsplit用于指定最大分割次数,不指定使用默认值0将全部分割
re.split('\d','www.1baidu2.3com',2) # 默认为0,即全部分隔;指定次数后只分隔两次
>>> ['www.', 'baidu', '.3com']
re.split(' ','www.baidu.com map.baidu.com') # 分隔空格
>>> ['www.baidu.com', 'map.baidu.com'] re.sub() # 匹配字符并进行替换
re.sub('\d','ai','www.b1du.com ',1) # 替换一次
>>> www.baidu.com
re.subn() # 与 sub 函数完全一致,只不过其返回值是包括两个元素的元组:(new_string, number);第一个返回值 new_string 为sub 函数的结果,第二个 number 为匹配及替换的次数。
ret=re.subn('\d','ai','www.b1du.com map.b2du.com',2) # 替换两次
>>> ('www.baidu.com map.baidu.com', 2)

re 模块的两种匹配模式

贪婪模式:尽可能多的去匹配

惰性模式:尽可能少的去匹配(后面加?号来限制)

Python学习 :正则表达式的更多相关文章

  1. python学习——正则表达式

    正则表达式                        正则表达式的主要作用就是对字符串进行匹配,通过匹配,进行筛选,选择出符合规则的字符串.其实正则表达式的作用就像是一个过滤器一样.你输入好自己的 ...

  2. python学习 正则表达式

    一.re 模块中 1.re.match #从开始位置开始匹配,如果开头没有match()就返回none 语法:re.match(pattern, string, flags=0) pattern 匹配 ...

  3. Python学习 ——正则表达式

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生 ...

  4. python学习-正则表达式(十)

    1.查看re模块的全部属性和函数 >>>import re,pprint >>>pprint.pprint(re.__all__) ['match', 'fullm ...

  5. [python 学习]正则表达式

    re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失 ...

  6. 四、python学习-正则表达式

    正则表达式 import re lst = re.findall(正则表达式,需要匹配的字符串) findall 把所有匹配到的字符串都搜出来,返回列表 不能把分组内容和匹配内容同时显示出来 sear ...

  7. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  8. 学习 正则表达式 js java c# python 通用

    正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Globa ...

  9. 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选

    在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...

  10. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

随机推荐

  1. Leetcode- Find Minimum in Rotated Sorted Array-ZZ

    http://changhaz.wordpress.com/2014/10/15/leetcode-find-minimum-in-rotated-sorted-array/ Suppose a so ...

  2. Java接口与多态

    接口 可以理解为一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成 接口的定义格式 接口的数据成员,只允许被public, static, final修饰. 接口的方 ...

  3. 放弃setInterval-说说定时器

    上述事件循环机制的核心是:JS引擎线程和事件触发线程 但事件上,里面还有一些隐藏细节,譬如调用setTimeout后,是如何等待特定时间后才添加到事件队列中的? 是JS引擎检测的么?当然不是了.它是由 ...

  4. c++11简单的线程

    线程的管理 启动线程 为了让编译器识别 std::thread 类,这个简单的例子也要包含 <thread> 头文件. 如同大多数C++标准库一样 线程在std::thread对象创建(为 ...

  5. Json.Net 中Linq to JSON的操作

    Linq to JSON是用来操作JSON对象的.可以用于快速查询,修改和创建JSON对象.当JSON对象内容比较复杂,而我们仅仅需要其中的一小部分数据时,可以考虑使用Linq to JSON来读取和 ...

  6. 一些jar包的作用

    发项目的过程中,经常需要用到一写jar包,现在对其中的一写jar的作用,做下总结,也算是避免少引或者多引jar包吧,欢迎大家补充.谢谢. 1.apache的一写jar commons-collecti ...

  7. Python Django 分页

    Python Django 分页 http://www.360doc.com/content/14/0721/17/16044571_396090985.shtml

  8. SQL表创建注意事项

    CREATE TABLE V_USER ( AUTOID ), USERID BYTE) NOT NULL, USERNAME BYTE) NOT NULL, USERPASSWORD BYTE) N ...

  9. Monad新解-FRP对比——ReactiveCocoa、RxSwift、Bacon以及背后的Functional

    ReactiveX Rx的Observable的本质就是一个Event Monad,即上下文(就是图文教程中包裹的盒子)为Event的一个Monad,这里的Event定义,可以对应语言的struct或 ...

  10. python 闭包@装饰器

    1.装饰器 装饰器(Decorator)相对简单,咱们先介绍它:“装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数”,听起来有点绕,没关系,直 ...