[Python]python正则入门--基本元字符匹配操作
来源:互联网 发布:下載外帀手機软件 编辑:程序博客网 时间:2024/06/06 06:53
正则对于文本文字处理很好用,以前总是觉得很难似的,认真的学习一下发现入门还是很简单的。
首先说的是元字符:
[] :-常用来制定一个字符集,只能匹配一个字符 [abc] 匹配a,b或者 c
-其他的元字符在[]中不起作用
^ :匹配行首
$ :匹配行尾
\ :转义 如果我们要去匹配的字符中含有元字符就会用到
#匹配字符串 ^#
\d 匹配任何十进制数字 [0-9]
\D 匹配任何非数字字符 [^0-9]
\s 匹配任何空白字符: [\t\n\r\f\v]
\S 匹配任何非空白字符 [^\t]\n\r\f\v]
\w 匹配任何字母数字字符 [a-zA-Z0-9]
\W 匹配任何非字母数字字符 [^a-zA-Z0-9]
. 匹配任何字符 出了换行符以外
例如电话号码 010-3333333 0103333333 05614444444 0561-3333333 前面是3位或者4位中间'-'可有可无最后是7位数字的呢? 这就用到多重复匹配的元字符了
* 制定前面的一个字符可以匹配0次或者是多次
a[bcd]*b --'abb' 'abbbccddb' 不限制次数只要匹配到就可以
| :或得匹配,也就是经常用得or的意思
{n} {m,n} :可以精确的匹配次数,或者范围
* {0,} +{1,} ?{0,1}
但是不建议那么用,还是用符号比较好
下面来说说re模块的一些方法:
re.compile() 当我们经常使用一些正则的时候就可以对他们进行预编译,然后使用,这样效率会提高。
这里只是简要的入门下,还有些元字符和很多的re模块的用法需要多练习,贪婪和非贪婪匹配,search和match匹配的不同,还有一些split操作,取字串的操作,每个单词的边界操作,等等都需要理解以后在做笔记
首先说的是元字符:
[] :-常用来制定一个字符集,只能匹配一个字符 [abc] 匹配a,b或者 c
-其他的元字符在[]中不起作用
- '^'表示补集,'-'表示范围
import rer='a[abc]c're.findall(r,'abc aac adc ')['abc', 'aac']r=r'a[bcd$]'re.findall(r,'ad')['ad']re.findall(r,'ab')['ab']r=r'[^abc]dd're.findall(r,'add cdd fdd')['fdd']r=r'[a-z]bc're.findall(r,'bbc ...abc')['bbc', 'abc']
^ :匹配行首
r=r'^abc're.findall(r,'abcd ...')['abc']re.findall(r,'bcd ...')[]
$ :匹配行尾
r='abc$'re.findall(r,'bcd ...ab')[]re.findall(r,'bcd ...abc')['abc']
\ :转义 如果我们要去匹配的字符中含有元字符就会用到
#匹配字符串 ^#
r=r'\^#'re.findall(r,'ddcd ^# nihao ')['^#']r=r'^#' #不用转义就无法匹配的到re.findall(r,'ddcd ^# nihao ')[]其他的\常用组合:
\d 匹配任何十进制数字 [0-9]
\D 匹配任何非数字字符 [^0-9]
\s 匹配任何空白字符: [\t\n\r\f\v]
\S 匹配任何非空白字符 [^\t]\n\r\f\v]
\w 匹配任何字母数字字符 [a-zA-Z0-9]
\W 匹配任何非字母数字字符 [^a-zA-Z0-9]
. 匹配任何字符 出了换行符以外
#例如匹配0561-4564620之类的电话号码r=r'\d\d\d\d-\d\d\d\d\d\d\d're.findall(r,'4567-3451234')['4567-3451234']#例如匹配只有3位字母数字组成的126邮箱r=r'\w\w\w@126.com're.findall(r,'ly1@126.com')['ly1@126.com']re.findall(r,'ly*@126.com') #特殊字符就无法匹配的到[]re.findall(r,'45673451234')[]#例如密码必须6位字符r=r'^......$'re.findall(r,'11111')[]re.findall(r,'11111e')['11111e']re.findall(r,'11111e5')[]上面例子限制的条件都很少,因为我们每次都只能用一个元字符限定一个字符的匹配,如果是匹配任意长得字符,或者不定长度的字符呢 或者字符中有些字符可以有也可以没有呢
例如电话号码 010-3333333 0103333333 05614444444 0561-3333333 前面是3位或者4位中间'-'可有可无最后是7位数字的呢? 这就用到多重复匹配的元字符了
* 制定前面的一个字符可以匹配0次或者是多次
a[bcd]*b --'abb' 'abbbccddb' 不限制次数只要匹配到就可以
r=r'\d*b' #匹配数字后面有个d的串,不管前面多少个数字,甚至0个都行re.findall(r,'333b 4444 d4d')['333b']re.findall(r,'333b 4444 d4d b')['333b', 'b']+ -表示匹配一次或者多次, 至少要有一次
#看看和*的不同r=r'\d+b're.findall(r,'333b 4444 d4d b 3b') #这里的b就没法匹配到了,因为前面至少要有一个数字['333b', '3b']?匹配0次或者一次,可以有可以没有,最多只能有一个
r=r'\d-?\d're.findall(r,'3-4 34 3--4 d-4')['3-4', '34'] #有2个'-'的就无法匹配到了
| :或得匹配,也就是经常用得or的意思
{n} {m,n} :可以精确的匹配次数,或者范围
#例如上面的电话号码的例子r=r'^\d{3,4}-?\d{7}'re.findall(r,'0104444444')['0104444444']re.findall(r,'010-4444444')['010-4444444']re.findall(r,'0101-4444444')['0101-4444444']re.findall(r,'01014444444')['01014444444']re.findall(r,'010144444444') #为什么8位也行呢,原来没有制定7个数字结尾['01014444444']r=r'^\d{3,4}-?\d{7}$'re.findall(r,'010144444444')[]那这里我们是不是可以用{}来代替上面的 * + ?呢,当然可以
* {0,} +{1,} ?{0,1}
但是不建议那么用,还是用符号比较好
下面来说说re模块的一些方法:
re.compile() 当我们经常使用一些正则的时候就可以对他们进行预编译,然后使用,这样效率会提高。
r=r'^\d{3,4}-?\d{7}$'res=re.compile(r)<_sre.SRE_Pattern object at 0x0299B728> #生成一个正则对象res.findall('0103333333')['0103333333']
这里只是简要的入门下,还有些元字符和很多的re模块的用法需要多练习,贪婪和非贪婪匹配,search和match匹配的不同,还有一些split操作,取字串的操作,每个单词的边界操作,等等都需要理解以后在做笔记
本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/8736561
- [Python]python正则入门--基本元字符匹配操作
- Python正则匹配 -> 基本规则
- 正则表达式 入门 -- 简单字符匹配、元字符
- Python 正则表达式---概念基础,匹配过程,表达式元字符和语法以及实例
- Python正则表达式(一):元字符
- python 正则表达式元字符详细介绍
- Python 正则表达式元字符、re 模块
- python -正则表达式--单字符匹配
- Python正则匹配 -> 模块和基本函数
- python 正则表达式入门(匹配IP)
- [Python] regex正则的所有元字符文档
- Python支持的正则表达式元字符和语法
- Python支持的正则表达式元字符和语法
- python正则匹配中文字符(包括冒号…
- python正则匹配含转义字符的字符串
- python re 正则表达式总结 匹配指定字符
- python里使用正则表达式的转义字符的匹配
- Python 匹配字符积累
- csv文件导入导出
- SecureCRT 遇到一个致命的错误且必须关闭。
- 获取本地文件大小
- 让AIX下的sqlplus也支持回显功能
- svn中代码管理的建议
- [Python]python正则入门--基本元字符匹配操作
- CUDA程序优化的记录
- m图着色问题
- The Max Sum Of The Sub Matrix(子矩阵和最大)
- Apache S4
- UTF-8学习
- Android - 文件读写操作 总结
- 工作中碰到的LR问题
- 分享我的学习方法——还是坚持+努力