python re正则模块
- 举例
life is short, i love python
# 我要验证这个字符串最后一个单词是不是life
# 我想拿到这个字符串中第三个单词,
# 都可以通过正则实现,现在来学习python re模块的使用
- re模块使用
# 导入re模块
import re
# 使用match方法进行匹配操作
result = re.match(正则表达式,要匹配的字符串)
# 如果上一步匹配到数据的话,可以使用group方法来提取数据
result.group()
# 第一个re模块函数,match:从字符串的第一个字符开始匹配
# 示例
import re
# result = re.match("life", "life is short, i love python")
result = re.match("is", "life is short, i love python")
print(result)
# re.match() 能够匹配出以xxx开头的字符串
- 匹配单个字符
上面我们了解到通过re模块能够完成使用正则表达式来匹配字符串,接下来我们讲解正则表达式的单字符匹配
import re
"""
. 匹配任意一个字符(除了\n)
'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;
'\n' 换行,换到当前位置的下一行,而不会回到行首;
那就是windows在写入文件的时候把一个\n转换成了\r\n,\r保持不变,记事本只认\r\n
[] 匹配[]中列举的一个字符
\d 匹配一个数字,即0-9
\D 匹配非数字
\s 匹配空白,即空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z,A-Z,0-9,_
\W 匹配非单词字符
"""
ret = re.match(".", "M")
# ret = re.match(".|\n", "\n")
# ret = re.match(".", "\n", re.S) # 匹配\n的两种方法
# ret = re.match("[.\n]", "\n")
print(ret.group())
ret = re.match("t.o", "too")
print(ret.group())
ret = re.match("t.o", "two")
print(ret.group())
其他的不讲了
- 匹配多个字符
import re
"""
* 匹配一个字符出现0次或者无限次
+ 匹配一个字符出现1次或者无限次
? 匹配一个字符出现1次或者0次
{m} 匹配一个字符出现m次
{m,n} 匹配一个字符出现m次到n次
"""
ret = re.match("A-Z*", "Aabcdef")
print(ret.group())
# 题目1:匹配一个字符串是不是163的邮箱地址,且@符号之前有4到20位,例如hello@163.com
ret1 = re.match("[a-zA-Z0-9]{4,20}@163.com", "fdfaffafa@163.com")
print(ret1.group())
# 注意点
# 1.{}不能有空格,2.\w可以匹配汉字 3..要转义 4.结尾的问题
ret1 = re.match("\w{4, 20}@163.com", "fdfaffafa@163.com")
print(ret1.group()) # 错误示范
- 匹配开头结尾
import re
"""
^ 匹配字符串开头
$ 匹配字符串结尾
"""
# 题目1:匹配出163的邮箱地址,且@符号之前有4到20位,例如hello@163.com
ret1 = re.match("\w{4,20}@163\.com$", "fdfaffafa@163.comfaf")
print(ret1.group())
# match就是从头开始匹配
- 匹配分组
"""
| 匹配左右任意一个表达式
(ab) 将括号中的字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
"""
print("\\n")
# | 匹配左右任意一个表达式
ret = re.match("a|b", "a")
print(ret.group())
# (ab) 将括号中的字符作为一个分组
ret = re.match("\w{4,20}@(163|126|qq).com", "test@163.com")
if ret:
print(ret.group(1))
# 如果打印group(1)可以得到分组的结果
else:
print("不是163、126、qq邮箱") # 不是163、126、qq邮箱
# \num 引用分组num匹配到的字符串
ret = re.match("<[a-zA-Z]>\w</[a-zA-Z]*>", "<html>hh</htmlbalabala>")
print(ret.group())
# 不行
# 引用分组
ret = re.match(r"<([a-zA-Z])>\w</\1>", "<html>hh</html>