Python高级语法-正则表达式
正则表达式在字符串匹配中起到巨大的作用。
简介
几个数据提取工具对比:
- re(正则表达式):速度很快,难度高(语法难记),不需要安装(python标准库内置)
- bs(BeautifulSoup):速度慢,使用简单(find等语法),安装简单(pip)
- lxml:速度比较快,使用简单(内置xpath),安装一般(pip)
这里可以看到虽然正则表达式上手比较难,但是它几乎是最通用速度最快最灵活的字符串分析工具。
本文只是介绍如何在Python中使用正则表达式,如何去写正则表达式的式子不是一篇博客说得清的。
语法
- .表示任意一个字符除了\n
- []匹配中括号中任意字符
- \d任意一个数字
- \D除了数字
- \s空格,tab键
- \S除了空白
- \w单词字符A-Z,a-z,0-9,_
- \W除了
- *表示前面内容重复零次或者多次
- +表示前面内容至少出现一次
- ?前面才出现的内容零次或者一次
- {m,n}允许前面的内容最少m次,最多n次
- ^匹配字符串的开始
- $匹配字符串的结尾
- \b匹配单词的边界
- ()对正则表达式内容进行分组,从第一个括号开始,编号逐渐增大
使用
1. 首先如何任何正则表达式使用的基础都是编译正则表达式的表达式生成正则表达式对象。
下面代码表示字符串中找到数字串
import re
p = re.compile(r'\d+')
print(type(p))
2. match(str,a,b)匹配字符串中符合条件的结果,a表示起始位置下标,b表示结束位置下标,只会在a,b之间查找
注意:match的结果是一个match对象,且得到的是第一个查找到的值。
import re
p = re.compile(r'\d+')
m = p.match("123nzcisbnkld45jh78")
print(type(m))
print(m)
<_sre.SRE_Match object; span=(0, 3), match='123'>
下面是match对象的一些常用方法。
import re
p = re.compile(r'\d+')
m = p.match("123nzcisbnkld45kl67")
# 匹配到的match对象的文本值
print(m[0])
# 匹配到的match对象在源字符串中的下标起始位置
print(m.start(0))
# 匹配到的match对象在源字符串中的下标结束位置
print(m.end(0))
123
0
3
注意:search方法和match类似,返回一个match对象。
3. findall(str,a,b)参数含义和match完全一致
import re
p = re.compile(r'\d+')
rst = p.findall("one12two34three567")
print(rst)
['12', '34', '567']
可以看到返回的是一个匹配到的所有结果字符串组成的列表。个人觉得这种方法会比较常用,例如使用爬虫时下面的配合replace等处理使用(下面代码包含html中查询指定标签的写法)。
import re
html = '''
138.201.101.33:8173
'''
# 匹配p标签的一种写法,其他标签可以类似修改
p =re.compile(r'[^<]*?')
lll = p.findall(html)
print(lll)
for item in lll:print(item)html.replace(item, "")
["", "", "", ""]
更多操作可以查看Python官方参考文档。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
