1 | # coding=utf-8 |
re.match() 是用来进行正则匹配检查的方法,若字符串匹配正则表达式,则match方法返回匹配对象(Match Object),否则返回None(注意不是空字符串””)
匹配对象Match Object具有group方法,用来返回字符串的匹配部分。
示例1:匹配以apple开头的语句:
1 | #coding=utf-8 |
说明:
- re.match() 能够匹配出以xxx开头的字符串
表示字符
字符 功能
. 匹配任意1个字符(除了\n)
[] 匹配[]中列举的字符
\d 匹配数字,即0–9
\D 匹配非数字
\s 匹配空白,即空格,tab键
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
[^] 表示只要不是集合里的元素就可以
[a-z5-9] 表示26个字母和5、6、7、8、9
\d = [0-9]
1 | # 表示数量 |
示例1: 匹配出,一个字符串第一个字母为大写字符,后面都是小写字母并且这些小写字母可有可无:
1 | # coding=utf-8 |
示例2:匹配出,变量名是否有效:
1 | #coding=utf-8 |
示例3: 匹配出,0到99之间的数字
1 | #coding=utf-8 |
示例4:匹配出,8到20位的密码,可以是大小写英文字母、数字、下划线
1 | #coding=utf-8 |
原始字符串
1 | s = '\nabc' |
说明:
python中字符串前面加上 r 表示原生字符串,与大多数编程语言相同,正则表达式里使用“"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”",那么使用编程语言表示的正则表达式里需要3个反斜杠”\\“:前两个和后两个分别用于在编程语言里转义程反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
python里的原生字符串很好的解决了这个问题,有了原始字符串,再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
表示边界:
字符 功能
^ 匹配字符串的开头
$ 匹配字符串的结尾
\b 匹配一个单词的边界
\B 匹配非单词边界
表示分组:
1 | | 匹配左右任意一个表达式 |
示例:
1 | # 匹配出<html><h1>hello</h1></html> |
re模块的高级用法
search
如:匹配出文章阅读的次数
1
2
3
4
5# coding=utf-8
import re
ret = re.search(r"\d+","阅读次数为 1000")
ret.group()findall
找出所有数字信息:
1
2
3
4
5#coding=utf-8
import re
ret = re.findall(r"\d+","a = 1 ,b = 20 ,c = 100")
print(ret)
sub将匹配到的数据进行替换
1
2
3
4
5
6
7
8
9
10
11# 第一种方法
#coding=utf-8
import re
ret = re.sub(r"\d+",'199','read = 198')
# 第二种 将匹配得到的结果传入函数replace中,用函数的返回值进行替换
def replace(result):
num = int(result)
return str(num+1)
re.sub(r"\d+", replace, "a = 2,b = 3")
split 根据匹配进行切割字符串,返回一个列表
1
2
3
4import re
ret = re.split(r":| ","info:haha 22 aabbcc")
print(ret)
python贪婪和非贪婪
python里数量词默认是贪婪的,总是尝试尽可能多匹配字符,非贪婪则相反
解决方式:非贪婪操作符”?”,这个操作符可以用在“*”,“+”,“?”的后面,要求匹配的越少越好。
题目: 构建一个类Foo 用python的魔法方法实现
class Foo()
print(Foo().welcome.hello.world)
welcome hello world
1 | # coding=utf-8 |
题目:有一些网址,需要如
https://www.baidu.com/1123/332/as.asp?id=32
需要正则后为:
1 | #coding=utf-8 |
题目:找出单词
apple orange banana hello world
1 | #coding=utf-8 |