python正则表达式使用简介
条评论正则表达式的用途非常多,包括文本的字符串处理,爬虫,分析日志等,第一次使用正则是通过perl,处理文本的时候感觉真是如虎添翼,怎一个爽字了得,现在编程基本都在使用python,python内置的正则表达式的模块是re,下面做个简单介绍。
1.元字符
- . 表示任意字符
- ^ 在中括号外表示以下一个字符开头,在中括号内表示取非
- $ 表示以上一个字符结尾
- 匹配前面字符或者表达式0次或者0次以上
- 匹配前面字符或者表达式0次或者0次以上
- ? 匹配前面字符或者表达式0次或者1次,停止贪婪
- { } 括号内容为数值,表示匹配次数
1 | {1,9} 匹配前面字符或者表达式1-9次 |
- 匹配的集合
1 | [0-9] 匹配数字 |
- \ 表示转义
- | 逻辑或
- ( )分组匹配,可以用来捕获目标字符串
2.表达符号
- \d 匹配数字,同[0-9]
- \D 匹配任意非数字,同[^0-9]
- \s 匹配任意空白字符,同[\t\n\r\f\n]
- \S 匹配任意非空白字符,同[^\t\n\r\f\n]
- \w 匹配任意字母数字字符及下划线,同[A-Za-z0-9_]
- \W 匹配任意非字母数字字符,同[^A-Za-z0-9]
3.使用正则表达式
加载re模块,标准库自带,无需下载
1 | import re |
匹配成功,返回含有两个字符串的列表['abc', 'abc']
1 | a = re.findall(r'abc','abdeababecd') |
匹配失败,返回空列表[]
- 匹配元字符 如 $,需要在元字符前面加\进行转义
1 | a = re.findall(r'abc\$','abc$') |
['abc$']
- re.I 不区分大小写
1 | a = re.findall(r'A|B','abc',re.I) |
['a', 'b']
- 括号作用,在匹配时候添加括号,结果只显示括号里面的内容
1 | a= re.findall(r'abc(\dabc)abc','abc1abcabc') |
['1abc']
- re.group() 分组捕获,re.group()**->** re.group(0)
re.group(1) -> 捕获第一个括号里的内容
re.group(2) -> 捕获第二个括号里的内容
往后以此类推 - re.M 多行匹配
- re.group 分组捕获
- re.match() 只匹配字符串开头的位置,返回一个对象
1 | a = re.match(r'a(bc)d(sdf)sfd','abcdsdfsfd') |
注意结果中的区别
1 | abcdsdfsfd |
- re.search() 从做到右进行匹配,直到找到一个为止(更为常用,与re.group()连用,注意与re.match()的区别)
- re.sub(模式,替换内容,字符串,替换次数) 0代表全部替换;等同于perl里面的 string~s/pattern/relpace/
1 | print re.sub(r'he','HE','hellohello') #默认匹配次数是0,全部替换 |
1 | HElloHEllo #全部替换 |
- re.complie() 编译正则的模式提高效率
1 | p = re.compile(r'ab*') |
1 | abc |
4.两个规则
1 | 贪婪模式->尽可能多的匹配 |
5.总结
re.findall() 查找所有匹配对象
re.match() 匹配开头
re.search() 从左至右,查找一个符合条件的字符串
可选项
re.I 匹配忽略大小写
re.M 进行多行匹配
re.S 匹配换行符