Python re 正则表达式 数据匹配提取 基本使用
小洲提示:代码可直接复制在编译器中运行,方便更好的理解
文章目录
- Python re 正则表达式 数据匹配提取 基本使用
- 前言
- 一、导入库,内置模块无需安装
- 二、语法介绍
- 三、常用的方法
- 3.1 re.compile()
- 3.2 re.match()
- 3.3 re.search()
- 3.4 re.findall()
- 3.5 re.sub()
- 四、在线正则表达式测试
- 总结
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、导入库,内置模块无需安装
import re
二、语法介绍
代码语言:javascript复制模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
正则表达式通常都包含反斜杠"\"以及小括号"()",模式元素(如 r't',等价于 '\t')匹配相应的特殊字符。
表达式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
[…] | 用来表示一组字符,单独列出:[abc] 匹配 ‘a’,‘b’,‘c’ |
[^…] | 取反,匹配不在[]中的字符:[^abcd] 匹配除了a,b,c,d之外的字符 |
. | 匹配任意字符,除了换行符,可通过flag参数设置匹配任意字符 |
* | 匹配0次或多次 |
| 匹配1次或多次,贪婪 |
? | 匹配0次或1次,非贪婪 |
a I b | 匹配a或b |
{ n} | 匹配n次 |
{ n, m} | 匹配n-m次 |
(表达式) | 对正则表达式分组并记住匹配的文本,常用 |
[0-9] | 匹配任何数字 |
d | 匹配任意数字,等价于 [0-9] |
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
[a-zA-Z0-9] | 匹配任何字母及数字 |
w | 匹配字母数字及下划线 |
W | 匹配非字母数字及下划线 |
s | 匹配任意空白字符,等价于 [ tnrf]。 |
S | 匹配任意非空字符 |
D | 匹配任意非数字 |
re.S | flags参数,使 “.” 特殊字符完全匹配任何字符 |
re.L | flags参数,匹配忽略字母大小写 |
三、常用的方法
3.1 re.compile()
代码语言:javascript复制re.compile() # 预编译, 编译后生成Regular Expression对象,由于该对象自己包含了正则表达式,所以调用对应的方法时不用给出正则字符串。
match object对象有以下方法:
group() 返回被 RE 匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span()返回一个元组包含匹配 (开始,结束) 的位置
re_obj = re.compile('[0-9] ')
result = re_obj.search(string='asda123fs1231') # 匹配数字,匹配第一次查找到的内容,返回match object对象
print(result.group()) # 123 # 123
3.2 re.match()
代码语言:javascript复制re.match() # 从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,否则返回None。
参数如下:
pattern: 正则规则
string : 要匹配的字符串
falgs : 匹配模式(这个是可选的,可写,可不写),re.S,re.L
match() 方法一旦匹配成功,就是一个match object对象
import re
str_text = "Python is a good language" # 要匹配的内容, 对应match 里面的string
result = re.match(pattern="Python.{10,15}", string=str_text, flags=re.S) # 使 "." 特殊字符完全匹配任何字符
print(result.group()) # 输出结果:Python is a good lang
3.3 re.search()
代码语言:javascript复制re.search() # 会在整个字符串内查找匹配,只要找到第一个匹配则返回一个match object对象,否则返回None。
str_text = "Python is a good language I am xiaozhou1 ! I am xiaozhou2 !"
result = re.search(pattern='I.*?!', string=str_text, flags=re.S) # 非贪婪
print(result.group()) # I am xiaozhou1 !
result = re.search(pattern='I. !', string=str_text, flags=re.S) # 贪婪
print(result.group()) # I am xiaozhou1 ! I am xiaozhou2 !
3.4 re.findall()
代码语言:javascript复制re.findall() # 会在整个字符串内查找匹配,返回所有匹配的结果,list类型,否则返回[]
str_text = "Python is a good language I am xiaozhou1 ! I am xiaozhou2 ! I am xiaozhou3 ! I am xiaozhou4 !"
result = re.findall(pattern='I.*?!', string=str_text, flags=re.S)
print(result) # ['I am xiaozhou1 !', 'I am xiaozhou2 !', 'I am xiaozhou3 !', 'I am xiaozhou4 !']
3.5 re.sub()
代码语言:javascript复制re.sub() # 会在整个字符串内查找匹配,将匹配的内容替换为设置(repl)的内容
参数如下:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
falgs : 匹配模式(这个是可选的,可写,可不写),re.S,re.L
str_text = 'I am xiaozhou 我是小洲'
result = re.sub(pattern='[u4e00-u9fa5]', repl='', string=str_text, count=0, flags=re.S) # [^u4e00-u9fa5] 替换所有非中文,^取反
print(result) # I am xiaozhou
四、在线正则表达式测试
在线正则表达式测试: https://tool.oschina.net/regex/#
总结
小洲提示:代码可直接复制在编译器中运行,方便更好的理解
例如:以上就是今天要讲的内容,本文仅仅简单介绍了re的使用,而re提供了大量能使我们快速便捷地处理数据的函数和方法,后续有关于re的常用代码会在这篇博客中持续更新。 转 python内置正则表达式(re)模块官方文档简要中文版:https://www.cnblogs.com/rosesmall/archive/2012/12/26/2833681.html