re模块
Posted zuihoudebieli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了re模块相关的知识,希望对你有一定的参考价值。
re模块
- 取文本或者字符串内找到你所需要的东西
基础的re使用
import re
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜'
res = re.findall('西瓜',s)
print(res)
['西瓜']
- ^ 叫做元字符,元字符会有特殊的意义,匹配开头的,也就是说他只从开头找
res = re.findall('^孙悟空',s)j
print(res)
res = re.findall('^猪八戒',s)
print(res)
['孙悟空']
[]
- $只从结尾找
s = '孙悟空找猪八戒找媳妇西高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('西瓜$',s)
print(res)
['西瓜']
- |相当于or
res = re.findall('孙悟空|猪八戒',s)
print(res)
['孙悟空', '猪八戒']
- []找到[]内的元素
s = 'abcdefgabckdjfkljsadalasjkdlfjklbkljklfjc'
res = re.findall("[a,b,c]",s)
print(res)
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'a', 'a', 'b', 'c']
- . 任意一个字符
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜,再吃西瓜'
#
res = re.findall('媳妇...',s)
print(res)
['媳妇高翠兰']
- 3大括号前面的字符匹配3次
s = '孙悟空找猪八戒找媳妇妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇5',s)
print(res)
[]
- *,前面的字符匹配无穷个,
s = '孙悟空找猪八戒找媳高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇*',s)
print(res)
['媳']
- +前面的字符,1到无穷个
s = '孙悟空找猪八戒找媳高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇+',s)
print(res)
[]
- ?前面的字符0-1个
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇?',s)
print(res)
['媳妇']
- \d匹配数字
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\d*',s)
print(res)
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '234234', '', '', '', '', '', '', '', '', '', '']
- \D除了是数字都匹配到了
然后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\D+',s)
print(res)
['孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西', '瓜,再吃 西瓜']
- \s,取空白
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\s+',s)
print(res)
[' ']
- \S,去非空字符
s = '孙悟空找猪八戒找媳妇妇###@@@妇高翠兰,然后asdfa___sdf吃西234234瓜,再吃 西瓜'
res = re.findall('\S+',s)
print(res)
['孙悟空找猪八戒找媳妇妇###@@@妇高翠兰,然后asdfa___sdf吃西
- \w,字母,数字,下划线
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\w+',s)
print(res)
['孙悟空找猪八戒找媳妇妇妇高', '翠兰', '然____后asdfasdf吃西234234瓜', '再吃', '西瓜']
- \W,非字母,数字,下划线
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\W+',s)
print(res)
['$$$$$@@@@', ',', ',', ' ']
贪婪模式
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
res = re.findall('猪.*妇',s)
print(s)
孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇
非贪婪模式
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
#
res = re.findall('猪.*?妇',s)
print(res)
['猪八戒找媳妇']
re模块高级
compile
- 写一个通用的规则模板
import re
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
res1 = re.compile('\d+')
res2 = re.compile('\w+')
res3 = re.compile('\s+')
result1 = res1.findall(s)
result2 = res2.findall(s)
result3 = res3.findall(s)
print(result1)
print(result2)
print(result3)
phone_compile = re.compile('1\d10')
email_compile = re.compile('\w+@\w+.\w+')
test_s = '12345678900 nickchen121@163.com 2287273393@qq.com'
res = phone_compile.findall(test_s)
print(res)
res = email_compile.findall(test_s)
print(res)
['234234']
['孙悟空找猪八戒找媳妇妇妇高', '翠兰', '然____后asdfasdf吃西234234瓜', '再吃', '西瓜妇']
[' ']
['12345678900']
['nickchen121@163.com', '2287273393@qq.com']
match和search
- match和srerch的区别,mathch从开头开始匹配找一个,search搜索所有的找第一个
# match 和 search的区别,mathch从开头开始匹配找一个,search搜索所有找第一个
import re
s = '猪八戒找媳妇猪八戒'
match_res = re.match('猪八戒',s) # 从开头开始匹配,取一个
print(match_res.group())
search_res = re.search('猪八戒',s) # 搜索一个
print(search_res.group())
猪八戒
猪八戒
分组
- 需要的东西括号就行了,括号外的就不打印了
import re
s = '猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py9的学生们)'
res = re.findall('(.*?)的媳妇是(.*?)(,)',s)
print(res)
[('猪八戒', '高翠兰', ','), ('孙悟空', '白骨精', ','), ('唐僧', '女儿国王', ',')]
re.split()
- 就是字符串的split方法,区别是可以使用正则表达式去替换
import re
s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净没有媳妇(py9的学生们)'
print(s.split(','))
res = re.split('\d+',s)
print(res)
s = '猪八戒的媳妇是a高翠兰,孙悟空的媳A妇是b白骨精,唐僧的B媳妇是z女儿国王,沙悟净没有媳妇(py9的学生们)'
print(s.split(','))
res = re.split('[a-zA-Z]',s) # a,b,c,
print(res)
['猪八戒的媳妇是1高翠兰', '孙悟空的媳妇是2白骨精', '唐僧的媳妇是3女儿国王', '沙悟净没有媳妇(py9的学生们)']
['猪八戒的媳妇是', '高翠兰,孙悟空的媳妇是', '白骨精,唐僧的媳妇是', '女儿国王,沙悟净没有媳妇(py', '的学生们)']
['猪八戒的媳妇是a高翠兰', '孙悟空的媳A妇是b白骨精', '唐僧的B媳妇是z女儿国王', '沙悟净没有媳妇(py9的学生们)']
['猪八戒的媳妇是', '高翠兰,孙悟空的媳', '妇是', '白骨精,唐僧的', '媳妇是', '女儿国王,沙悟净没有媳妇(', '', '9的学生们)']
sub和subn
- 他们俩都是替换内容,但是subn会计算替换了多少次,类似于字符串的replace内置方法
import re
s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净6没有媳妇(py9的学生们)'
print(re.sub('\d','',s))
print(re.subn('\d','',s)) # 除了会修改内容,还会返回修改了多少次
猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)
('猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)', 5)
以上是关于re模块的主要内容,如果未能解决你的问题,请参考以下文章