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模块的主要内容,如果未能解决你的问题,请参考以下文章

re模块的高级用法

python3怎么导入re模块

Python模块-re模块

python re模块

re模块

python常用模块之re模块(正则)