正则表达式
1. 正则表达式概念
正则表达式就是记录文本规则的代码
2. 正则表达式的样子
0\d{2}-\d{8} 这个就是一个正则表达式,表达的意思是匹配的是座机号码
3. 正则表达式的特点
正则表达式的语法很令人头疼,可读性差
正则表达式通用行很强,能够适用于很多编程语言
1. re模块的使用过程
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re
# 导入re模块 import re # 使用match方法进行匹配操作 result = (正则表达式,要匹配的字符串) # 如果上一步匹配到数据的话,可以使用group方法来提取数据 ()
2. re模块示例
#coding=utf-8 import re result = ("hello","") result.group()
运行结果为:
hello
定义
用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。
常见语法
字符
语法 | 说明 | 表达式案例 | 完整匹配字符串 |
---|---|---|---|
一般字符 | 匹配自身 | abc | abc |
. | 匹配任意除换行符\n 外的字符。在DOTALL模式中也能匹配换行符 |
abc | |
\ | 转义字符,使后一个字符表示字符本身。 | ||
[...] | 选取字符范围 | a[bcd]e | abe 或 ace 或 ade |
预定义字符集(可以写在字符集[...]中)
语法 | 说明 | 表达式案例 | 完整匹配字符串 |
---|---|---|---|
\d | 数字:[0-9] | a\dc | a1c |
\D | 非数字:0-9 | a\Dc | abc |
\s | 空白字符:[\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:\t\r\n\f\v | a\Sc | abc |
\w | 单词字符:[A-Za-z0-9_] | a\wc | abc |
\W | 非单词字符:A-Za-z0-9_ | a\Wc | a c |
数量词(用在字符或(...)之后)
语法 | 说明 | 表达式案例 | 完整匹配字符串 |
---|---|---|---|
* | 匹配前一个字符0次或无限次。 | abc* | abccc |
+ | 匹配前一个字符1次或无限次。 | abc+ | abccc |
? | 匹配前一个字符0次或1次。 | abc? | abc 或 ab |
{m} | 匹配前一个字符m次。 | ab{2}c | abbc |
匹配单个字符
示例1:
#coding=utf-8import reret = (".","M")print(ret.group())ret = ("","too")print(ret.group())ret = ("","two")print(ret.group())
运行结果:
Mtootwo
示例2:[]
import re# 如果hello的首字符小写,那么正则表达式需要小写的hret = ("h","hello Python")print(ret.group())# 如果hello的首字符大写,那么正则表达式需要大写的Hret = ("H","Hello Python")print(ret.group())# 大小写h都可以的情况ret = ("[hH]","hello Python")print(ret.group())ret = ("[hH]","Hello Python")print(ret.group())ret = ("[hH]ello Python","Hello Python")print(ret.group())# 匹配0到9第一种写法ret = ("[0123456789]Hello Python","7Hello Python")print(ret.group())# 匹配0到9第二种写法ret = ("[0-9]Hello Python","7Hello Python")print(ret.group())ret = ("[0-35-9]Hello Python","7Hello Python")print(ret.group())# 下面这个正则不能够匹配到数字4,因此ret为Noneret = ("[0-35-9]Hello Python","4Hello Python")# print(ret.group())
运行结果:
hHhHHello Python7Hello Python7Hello Python7Hello Python
示例3:\d
import re# 普通的匹配方式ret = re.match("嫦娥1号","嫦娥1号发射成功")print(())ret = re.match("嫦娥2号","嫦娥2号发射成功")print(())ret = re.match("嫦娥3号","嫦娥3号发射成功")print(())# 使用\d进行匹配ret = re.match("嫦娥\d号","嫦娥1号发射成功")print(())ret = re.match("嫦娥\d号","嫦娥2号发射成功")print(())ret = re.match("嫦娥\d号","嫦娥3号发射成功")print(())
运行结果:
嫦娥1号嫦娥2号嫦娥3号嫦娥1号嫦娥2号嫦娥3号
示例4:\D
import rematch_obj = ("\D", "f")if match_obj: # 获取匹配结果 print(match_obj.group())else: print("匹配失败")
运行结果:
f
示例5:\s
import re# 空格属于空白字符match_obj = re.match("hello\sworld", "hello world")if match_obj: result = match_obj.group() print(result)else: print("匹配失败")# \t 属于空白字符match_obj = re.match("hello\sworld", "hello\tworld")if match_obj: result = match_obj.group() print(result)else: print("匹配失败")
运行结果:
hello worldhello world
示例6:\S
import rematch_obj = re.match("hello\Sworld", "hello&world")if match_obj: result = match_obj.group() print(result)else: print("匹配失败")match_obj = re.match("hello\Sworld", "hello$world")if match_obj: result = match_obj.group() print(result)else: print("匹配失败")
运行结果:
hello&world hello$world
示例7:\w
import re# 匹配非特殊字符中的一位match_obj = ("\w", "A")if match_obj: # 获取匹配结果 print(match_obj.group())else: print("匹配失败")
执行结果:
A
示例8:\W
# 匹配特殊字符中的一位match_obj = re.match("\W", "&")if match_obj: # 获取匹配结果 print(match_obj.group())else: print("匹配失败")
执行结果:
&
想要了解更多关于IT相关的信息,欢迎关注本公众号