python使用正則表達式
python中使用正則表達式
1. 匹配字符
正則表達式中的元字符有 . ^ $ * + ? { } [ ] \ | ( )
匹配字符用的模式有
\d 匹配随意数字
\D 匹配随意非数字
\s 匹配随意空白字符
\S 匹配随意非空格字符
\w 匹配随意数字或者字母
\W 匹配随意非数字或者字母
2. 正則表達式
python中使用compile处理正則表達式。如:
import re;
p=re.compile(‘[a-c]’);
p.match(s);
s是待匹配的字符串,match是匹配方法。类似的方法有
match() 确定从行首開始匹配
search() 在任何位置匹配
findall() 找匹配的全部子串,并作为子串返回
finditer() 找匹配的全部子串,而且以迭代器的形式返回
match也有非常多方法。如:
group() 把正則表達式匹配的字符串返回
start() 返回匹配的起点
end() 返回匹配的终点
span() 返回匹配的(start,end)的元组
例1:>>>import re;
>>>p=re.compile(‘^[a-c]’)
>>>q=p.match(“abcd”);
>>>print q.group()
ab
>>>>q.span()
(0,2)
例2:
>>>import re
>>>p=re.compile(‘\d+’);
>>>q=p.findall(‘1 and 10 and 20’);
>>>print q
[‘1’,’2’,’3’]
上述的匹配也能够使用第二种形式。即:
re.match(’\d+’,’d23r’)
例3:
>>>p=re.match(’\d+’,’d23r’)
>>>print p
None
匹配的其他參数:
re.compile(‘[a-c]’,re.I) re.I 表示忽略大写和小写
re.compile(‘^ab$’,re.M) re.M 表示^或者$在行首和行尾以及字符串的开头和结束都会进行匹配。
假设不加这个标志。仅仅会在字符串的開始和结束之处匹配
例4:
re.compile(“””
[1-3] #1-3
[a-c] # a-c
“””,re.VERBOSE
) re.VERBOSE 的出现使得正則表達式能够再多行出现,并且能够在每行加上凝视
上面的匹配相当于 re.compile(‘[1-3][a-c]’)
3. 分组
使用()来进行分组
例5:
>>>p=re.compile(‘(12)+’)
>>>m=p.match(‘121212’)
>>>print m.group()
121212
上面匹配的是12反复出现一次或多次
还能够打印分组的信息。
>>>print m.group(1)
12
python会自己主动捕获分组的信息,假设不想捕获分组的信息。能够使用?:
例6:
>>>import re
>>>s =”hello ab1cd”;
>>>p=re.search(‘(?
:h.*)(a.*)(c.*)’);
>>>print “a* {0}”.format(p.group(1))
a* ab
>>>print “c* {0}”.format(p.group(2))
c* cd
p.group(0)存放的是整个表达式的匹配情况,p.group(1)存放的是(a.*)的匹配信息,p.group(2)存放的是(b.*)的匹配信息,而 h.*前面由于有?:没有被捕获
假设分组过多。使用组的标号还是显得麻烦,这时能够对组进行命名,然后能够通过名字来使用它们。
例7:
>>>import re;
>>>s=”hello ab1cd”
>>>p=re.search(‘(?P<a>a.*)(?P<c>c.*)’);
>>>print “a* {0}”.format(p.group(‘a’)
a* ab
>>>print “c* {0}”.format(p.group(‘c’))
c* cd
4.贪婪和非贪婪模式
在贪婪模式下,* + 都会尽可能地多匹配字符。如:
例8:
>>>import re;
>>>p=re.compile('<h.*></h>');
>>>m=p.findall('<h1></h><h2></h>')
>>>print m;
[‘<h1></h><h2></h>’]
有时希望它匹配出<h1></h>,<h2></h>两个结果。这时就能够用非贪婪模式了。仅仅要在*或.后面加上?。
例9:
>>>import re;
>>>p=re.compile('<h.*?
></h>');
>>>m=p.findall('<h1></h><h2></h>')
>>>print m;
[‘<h1></h>’,’<h2></h>’]
5. 前向定界符和后向定界符
假设先匹配模式A,在匹配模式B,能够使用A(?=B),假设先匹配模式A,并且希望后面没有B,能够使用A(?!B).
例10:
>>>import re;
>>>s=”ab2cd”
>>>m=re.search(“ab2(?=cd)”,s);
>>>print m.group();
ab2cd
例11:
>>>import re;
>>>s='ab2cd'
>>>m=re.search('ab2(?!cd)',s);
>>>print m
None
类似地,假设匹配模式B,同一时候在其前面要有模式A,能够使用(?
<=A)B的形式,
假设匹配模式B,同一时候在其前面没有模式A。能够使用(?<!A)B的形式
例12:
>>>import re;
>>>s=”ab2cd”;
>>>m=re.search(‘(?<=ab2)cd’,s)
>>>print m.group()
cd
例13:
>>>import re
>>>string= "ab2cd"
>>>pattern = re.search(r'(?<!ab2)cd',string)
>>>print pattern;
None
python使用正則表達式的更多相关文章
- python re 正則表達式
夜深了.敲击键盘.用CSDN整理下python re 正則表達式是含有文本和特别字符的字符串,这些文本和特别字符描写叙述的模式能够识别各种字符串. 一下我们从实例结合理论来学习理解吧... 经常使 ...
- Python基础--正則表達式基本的语法以及re模块
正则是个非常牛逼的东西,python中当然也不会缺少. 所以今天的Python就跟大家一起讨论一下python中的re模块. re模块包括对正則表達式的支持. 什么是正则: 正則表達式是能够匹配文本片 ...
- python 学习笔记 10 -- 正則表達式
零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...
- Python正則表達式:怎样使用正則表達式
正則表達式(简称RE)本质上能够看作一个小的.高度专业化的编程语言,在Python中能够通过re模块使用它.使用正則表達式,你须要为想要匹配的字符串集合指定一套规则,字符串集合能够包括英文句子.e-m ...
- python进阶十_正則表達式(一)
近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...
- 正則表達式re中的贪心算法和非贪心算法 在python中的应用
之前写了一篇有关正則表達式的文章.主要是介绍了正則表達式中通配符 转义字符 字符集 选择符和子模式 可选项和反复子模式 字符串的開始和结尾 ,有兴趣的能够查看博客内容. 此文章主要内容将要介绍re中的 ...
- Python学习笔记8:标准库之正則表達式
Python拥有强大的标准库.从如今起,開始学习标准库中提供的一些经常使用功能. 首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pa ...
- Python——正則表達式(2)
本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ======================== ...
- Python正則表達式小结(1)
学习一段python正則表達式了, 对match.search.findall.finditer等函数作一小结 以下以一段网页为例,用python正則表達式作一个范例: strHtml = '''& ...
随机推荐
- 泛型,迭代器,LinkedList<E>
1 <e>里面只能填类,不能用基本数据类型,不过integer 这样的的也行 2在模板类(泛型类中)class demo<e>由于不知道e是那个,所有通常都是重写大家都有的to ...
- Spring Cp30配置
1.配置db.properties <bean id= "propertyConfigurer" class="org.springframework.beans. ...
- Jquery中删除元素方法
empty用来删除指定元素的子元素,remove用来删除元素,或者设定细化条件执行删除 语法: empty() remove(expr); empty用来删除指定元素的子元素,remove用来删除元素 ...
- PHP 运算符 详解
PHP 算数运算符 运算符 名称 例子 结果 + 加法 $x + $y $x 与 $y 求和 - 减法 $x - $y $x 与 $y 的差数 * 乘法 $x * $y $x 与 $y 的乘积 / 除 ...
- jquery easy ui 学习 (5) windowlayout
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- sublime text3 下搭建python IDE环境 --Anaconda插件篇
近来在园区发现大家使用ST3(Sublime text 3)工具进行python学习.然后自己也跟风了一把. 1.ST3下载地址: http://www.sublimetext.com/3 2.安装S ...
- IOS自定义alertview
在家闲来无事,于是就看起来ios绘图的那块,写点什么好呢? 鼓捣了一会,总算写出了一个小东西 这个是写完以后的效果 这里我实现了三种款式的alertview 分别是成功,错误和警告,剩下的呢有空继续添 ...
- c++内存管理错误记录
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer( const void * pUserData ){ if (!pUse ...
- Dapper中使用存储分页。
#region 分页获取数据 /// <summary> /// 分页获取数据 /// </summary> /// <typeparam name="T&qu ...
- Develop a Packet Sniffer with libpcap
Develop a Packet Sniffer with libpcap: http://vichargrave.com/develop-a-packet-sniffer-with-libpcap/