05. re模块

一、re模块

1.1 正则表达式

由一系列特殊字符拼接而成的表达式/规则,用于从一个大字符串中匹配出符合一定规则的子字符串

1.2 常用匹配模式

在这里插入图片描述

1.3 re模块具体使用

import re 

# \w 匹配字母数字下划线(汉字)
print(re.findall('\w', 'hello_你好 -123!'))  # ['h', 'e', 'l', 'l', 'o', '_', '你', '好', '1', '2', '3']
# \W 匹配非字母数字下划线汉字之外的
print(re.findall('\W', 'hello_你好 -123!\n'))  # [' ', '-', '!', '\n']
# \s 匹配空包字符,等同于使用[\t\n\r\f]
print(re.findall('\s', 'hello world!\n'))  # [' ', '\n']
# \S 匹配非空字符
print(re.findall('\S', 'hello world!\n'))  # ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '!']
# \D 匹配任意非数字字符
print(re.findall('\D', 'hello world123!'))  # ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
# \d 匹配任意数字字符  等价于使用[0-9]
print(re.findall('\d', 'hello world123!'))  # ['1', '2', '3']
# \n、\t
print(re.findall('[\t\n]', 'hello\tworld\n'))  # ['\t', '\n']
# ^ 匹配以...开头的字符串
print(re.findall('^hel', 'hello world'))  # ['hel']
# $ 匹配以...结尾的字符串
print(re.findall('ld$', 'hello world'))  # ['ld']
# . 匹配任意字符(除了\n),可以指定re.DOTALL标识匹配\n
print(re.findall('.', 'abc!\n\t123', re.DOTALL))  # ['a', 'b', 'c', '!', '\n', '\t', '1', '2', '3']
print(re.findall('a.b', 'avb a b a!b a\tb a1b'))  # ['avb', 'a b', 'a!b', 'a\tb', 'a1b']
# [] 匹配一个字符, 可以指定范围,如果字符包含"-"需要放到开头或者最后
print(re.findall('[-+*/]', 'a+b a-b a*b a/b'))  # ['+', '-', '*', '/']
print(re.findall('[a-zA-Z]', 'Hello World'))  # ['H', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd']
# [^] 代表取反
print(re.findall('[^0-9]', 'hello 12345'))  # ['h', 'e', 'l', 'l', 'o', ' ']
# *:左边的字符出现0次或者无穷次,等同于{0,}
print(re.findall('ab*', 'a ab abbbabbbbbbb'))  # ['a', 'ab', 'abbb', 'abbbbbbb']
# +:左边的字符出现1次或者无穷次,等同于{1,}
print(re.findall('ab+', 'a ab abbbabbbbbbb'))  # ['ab', 'abbb', 'abbbbbbb']
# {n,m}:左边的字符出现n~m次子字符串
print(re.findall('ab{2,4}', 'ab abb aaabbb abbbbb'))  # ['abb', 'abbb', 'abbbb']
# ?:匹配左边的字符出现0或者1次的子字符串
print(re.findall('ab?', 'a ab abb abbb '))  # ['a', 'ab', 'ab', 'ab']
# 搭配使用.*:可匹配所有,贪婪匹配
print(re.findall('a.*b', 'ahellob a b ab a#\tb'))  # ['ahellob a b ab a#\tb']
# .*? : 可以非贪婪匹配所有
print(re.findall('a.*?b', 'ahellob a b ab a#\tb'))  # ['ahellob', 'a b', 'ab', 'a#\tb']
# ():分组,只返回括号内(组内)的部分
print(re.findall('(ab)+123', 'ababab123'))  # ['ab']
# (?:):取消分组,返回匹配的全部内容
print(re.findall('(?:ab)+123', 'ababab123'))  # ['ababab123']
# |:表示或者
print(re.findall('hobb(?:ies|y)', '-do you have any hobby?-i have many hobbies!'))  # ['hobby', 'hobbies']
# \
print(re.findall('a\\c', 'a\c a1c aac'))  # 对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常
print(re.findall('a\\\\c', 'a\c a1c aac'))  # ['a\\c']	

1.4 re模块的方法

(1)re.findall
返回所有满足匹配条件的结果,放在列表里
(2)re.search
只找到第一个匹配条件的然后就返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果没有匹配的就返回None

import re

print(re.search('o', 'hello world'))  # <re.Match object; span=(4, 5), match='o'>
print(re.search("\d+\.?\d*", "1.3 aa3.44aaa").group())  # 1.3
print(re.search("\d+\.?\d*", "hello"))  # None

(3)re.match
在字符串开头开始匹配,不满足条件返回None
可以使用re.search + ^ 来代替

import re
print(re.match("\d+\.?\d*", "1.3 aa3.44aaa").group())  # 1.3
print(re.match("\d+\.?\d*", "1.3 aa3.44aaa"))  # <re.Match object; span=(0, 3), match='1.3'>

(4)re.split
可以指定多个自定义的分隔符,而字符串内置的split方法每次只能按照一种字符来分割

import re

msg = 'cc:18-male+handsome'
print(re.split('[:+-]', msg))  # ['cc', '18', 'male', 'handsome']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值