python正则表达式
1、re简介
正则表达式re,是Regular Expression的简称。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
2、在python中使用正则表达式
在python中许多场合(本人是在使用爬虫时)正则表达式都能起到很关键的作用,在使用前,先引用re包。
1、引入
import re
引入re包
2、基础语法
re.findall(r'正则式','文本',flag)
findall返回的是一个数组,每个结果是一个元素
re.search(r'正则式','文本',flag)
search返回的是一个match对象
re.sub(r'正则式','替换对象','文本',flag)
寻找正则式并替换成指定内容
3、写正则表达式的步骤
- 确定包含几个子模式
- 确定各个子模式内容
- 各个子模式重复情况
- 位置限制
4、正则表达式的基础语法
1.字符类型 | |
---|---|
正则内容 | 匹配内容 |
a,b,c,1,2,3 | 字符常量,写什么就是什么 |
\d | 一个数字 |
\D | 一个非数字 |
\s | 一个空格 |
\S | 一个非空格 |
\w | 一个任意字母、数字、下划线 |
\W | 一个非任意字母、数字、下划线 |
. | 任意字符 |
[abc] | a,b,c中任意一个字符 |
[a-e] | a-e中任意一个字符 |
[1-9] | 1-9中任意一个数字 |
[^3-5] | 取反,除了3-5中的任意内容 |
2.重复次数、量词 | |
---|---|
量词内容 | 匹配内容 |
* | 0或多个 |
+ | 1或多个 |
? | 0或一个 |
{2} | 2个 |
{2,5} | 2到5个 |
3.组合模式 | |
---|---|
() | 分组,运用括号防止歧义 |
| | 多种情况同时出现 |
拼接 | 多个模式直接拼接 |
4.位置 | |
---|---|
正则内容 | 匹配内容 |
^ | 文章开头 |
$ | 文章结尾 |
\b | 单词边界 |
\B | 非单词边界 |
5.flag | |
---|---|
re.I | 忽略大小写的匹配模式 |
re.M | 多行模式, 改变 ^ 和 $ 的行为 |
re.S | 此模式下 '.' 的匹配不受限制,可匹配任何字符,包括换行符,也就是默认是不能匹配换行符 |
re.X | 冗余模式, 此模式忽略正则表达式中的空白和#号的注释 |
5、实际案例
1、不使用正则表达式的查找
# 在字符串中找到一段固定内容,不需要使用正则表达式
text = 'The quick brown fox jumps over a lazy dog'
target = 'fox'
if target in text:
print('找到了')
找到了
2、寻找固定内容
# 用正则表达式在文本中寻找固定内容
text = 'The quick brown fox jumps over a lazy dog'
result = re.findall(r'fox',text)
print(result)
['fox']
3、寻找特定内容
# 用正则表达式在文本中寻找特定内容
# 寻找单个字符
text = 'The quick brown fox jumps over a lazy dog'
result = re.findall(r'\w',text)
print(result)
# 寻找多个字符
text = 'The quick brown fox jumps over a lazy dog'
result = re.findall(r'\w+',text)
print(result)
['T', 'h', 'e', 'q', 'u', 'i', 'c', 'k', 'b', 'r', 'o', 'w', 'n', 'f', 'o', 'x', 'j', 'u', 'm', 'p', 's', 'o', 'v', 'e', 'r', 'a', 'l', 'a', 'z', 'y', 'd', 'o', 'g']
['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'a', 'lazy', 'dog']
4、寻找多种情况
# 寻找3、4个字母的单词
# \b表示单词的边界,限定单词只能为3个字母或四个字母
text = 'The fast brown fox jumps over a lazy dog and has 24 letters'
result = re.findall(r'\b\w{3}\b|\b\w{4}\b',text)
print(result)
['The', 'fast', 'fox', 'over', 'lazy', 'dog', 'and', 'has']
5、寻找组合情况
# 寻找数字 单词的情况
text = 'The fast brown fox jumps over a lazy dog and has 24 letters'
result = re.findall(r'\d+ \w+',text)
print(result)
['24 letters']
6、寻找限定位置的情况
# 在句首或句尾
text = 'The fast brown fox jumps over a lazy dog and has 24 letters'
result = re.findall(r'^\w+|\w+$',text)
print(result)
['The', 'letters']
7、判断是否存在
text = 'The fast brown fox jumps over a lazy dog and has 24 letters'
if re.findall(r'fox',text):
print('存在')
else :
print('不存在')
存在
6、总结
当一个问题可以用正则表达式解决,那么你就有了两个问题。