系列文章目录
第一章 Python 基础知识
第二章 python 字符串处理
第三章 python 数据类型
第四章 python 运算符与流程控制
第五章 python 文件操作
第六章 python 函数
第七章 python 常用内建函数
第八章 python 类(面向对象编程)
第九章 python 异常处理
第十章 python 自定义模块及导入方法
第十一章 python 常用标准库
第十二章 python 正则表达式
第十三章 python 操作数据库
正则表达式是对字符串操作的一种逻辑方式,就是用预先定义好的一些特定字符及这些特定字符的组合,组成一个规则字符串,这个规则字符串就是表达对字符串的逻辑,给定一个正则表达式和另一个字符串,通过正则表达式从字符串得到我们想要的部分
方法 | 描述 |
---|---|
re.compile(pattern,flags=0) | 把正则表达式编译成一个对象 |
re.match(pattern,string,flags=0) | 匹配字符串开始,如果不匹配返回None |
re.search(pattern,string,maxsplit=0,flags=0) | 扫描字符串寻找匹配,如果符合返回一个匹配对象并终止匹配,否则返回None |
re.split(pattern,string,maxsplit=0,flags=0) | 以匹配模式作为分隔符,切分字符串为列表 |
re.findall(pattern,string,flags=0) | 以列表形式返回所有匹配的字符串 |
re.finditer(pattern,string,flags=0) | 以迭代器形式返回所有匹配的字符串 |
re.sub(pattern,repl,string,count=0,flags=0) | 字符串替换,repl替代匹配的字符串,repl可以是一个函数 |
pattern指的是正则表达式。flags是标志位的修饰符,用于控制表达式匹配模式
实例1:
import re
s = "this is test string"
pattern = re.compile('this')
result = pattern.match(s)
# 匹配成功后,result对象会增加一个group()方法,可以用它来获取匹配结果
print(result.group())
import re
s = "this is test string"
result = re.match('this',s)
print(result.group())
字符 | 描述 |
---|---|
. | 任意单个字符(除了\n) |
[] | 匹配中括号中的任意1个字符,并且特殊字符写在[]会被当成普通字符来匹配 |
[.-.] | 匹配中括号中范围内的任意1个字符,例如[a-z],[0-9] |
[^] | 匹配[^字符]之外的任意一个字符 |
\d | 匹配数字,等效[0-9] |
\D | 匹配非数字字符,等效[^0-9] |
\s | 匹配单个空白字符(空格、Tab键),等效[\t\n\r\f\v] |
\S | 匹配空白字符之外的所有字符,等效[^\t\n\r\f\v] |
\w | 匹配字符、数字、下划线,等效[a-zA-Z0-9] |
\W | 与\w相反,等效[……a-zA-Z0-9] |
import re
s = "hello world"
result1 = re.match('.',s)
result2 = re.match('..',s)
result3 = re.match('...',s)
result4 = re.match('hell.',s)
print(result1)
print(result2)
print(result3)
print(result4)
result5 = re.match('[a-z]',s)
print(result5)
result6 = re.match('[^a-z]',s)
print(result6)
n = '123 4567777777'
result = re.match('\d\d\d\s',n)
print(result)
n = 'aBc123'
result = re.match('\w\w\w\w\w\w',n)
print(result)
“r” 表示原始字符串,有了它,字符串里的特殊意义符号就会自动加转义符
实例:
import re
s = "123\\abc"
result = re.match("123\\abc",s)
result1 = re.match("123\\\\abc",s)
result2 = re.match(r"123\\abc",s)
print(result)
print(result1)
print(result2)
代表数量前方需要一个表达式,只是数量会报错
例如:
import re
s = “hello world”
result = re.match(‘*’,s)
print(result)
是会报错的
字符 | 描述 |
---|---|
* | 匹配前面的子表达式0次或多次(无限次) |
+ | 匹配前面的子表达式1次或多次 |
? | 匹配前面的子表达式0次或1次 |
{n} | 匹配花括号前面字符n个字符 |
{n,} | 匹配花括号前面字符至少n个字符 |
{n,m} | 匹配花括号前面字符至少n个字符,最多m个字符 |
import re
s = "hello world"
result = re.match("hel*o",s) # 匹配所有
result1 = re.match("hel+o",s) # 匹配前1个字符一次或多次
result2 = re.match("hello?",s) # 匹配前1个字符一次,如果两次无效
result3 = re.match(".{5}",s)
result4 = re.match(".{3,8}",s)
print(result)
print(result1)
print(result2)
print(result3)
print(result4)
n = "17600000993"
result5 = re.match(".{11}",n)
# result5 = re.match("\d{11}",n)
if result5:
print("这是一个11位的手机号")
else:
print("这不是一个手机号")
字符 | 描述 |
---|---|
^ | 匹配以什么开头 |
$ | 匹配以什么结尾 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
import re
email = "[email protected]"
result = re.match("^\w+@\d+\.\w+",email)
result1 = re.match("^\w+@[0-9]+\.[a-z]+$",email)
print(result)
print(result1)
字符 | 描述 |
---|---|
匹配竖杠两边的任意一个正则表达式 | |
(re) | 匹配小括号中正则表达式 使用\n反向引用,n是数字,从1开始编号,表示引用第n个分组匹配的内容 |
(?Pre) | 分组别名,name是表示分组名称 |
(?P=name) | 引用分组别名 |
import re
s = "[email protected]
"
result = re.match(r"<(\w+[0-9])>.*(\1)>",s) # (re)用法
print(result)
import re
s = "hello world"
result = re.match("(?P\w+) (?P\w+)" ,s)
print(result)
print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(1,2))
print(result.group("h"))
print(result.group("w"))
贪婪模式:尽可能最多匹配
非贪婪模式:尽可能最少匹配,一般在量词(*、+)后面加个?问号就是非贪婪模式
import re
s = "hello 66666666"
result = re.match("hello 6+",s) # 贪婪匹配
print(result)
result = re.match("hello 6+?",s) # 非贪婪匹配
print(result)
s = "我今年30岁"
result = re.match("\w+",s) # 贪婪匹配
print(result)
result = re.match("\w+?(\d+)(\w+)",s) # 非贪婪匹配
print(result.group())
print(result.group(1))
print(result.group(2))
类别 | 描述 |
---|---|
re.search(pattern,string,flags=0) | 扫描字符串寻找匹配,如果符合返回一个匹配对象并终止屁屁额,否则返回None |
re.split(pattern,string,maxsplit=0,flags=0) | 以匹配模式作为分隔符,切分字符串为列表 |
re.findall(pattern,string,flags=0) | 以列表形式返回所有匹配的字符串 |
re.finditer(pattern,string,flags=0) | 以迭代器形式返回所有匹配的字符串 |
re.sub(pattern,repl,sting,count=0,flags=0) | 字符串替换,repl替换匹配的字符串,repl可以是一个函数 |
import re
s = "我今年30岁,身高175cm"
result = re.search("\d+",s)
print('search:',result.group())
result = re.split("\d+",s)
print('split:',result)
print('split:',result[0])
result = re.findall("\d+",s)
print('findall:',result)
result = re.finditer("\d+",s)
print('finditer:',result)
result = re.sub("30","40",s)
print('sub:',result)
字符 | 描述 |
---|---|
re.I/re.lGNORECASE | 忽略大小写 |
re.S/re.DOTAIL | 匹配所有字符,包括换行符\n,如果没有这个标志将匹配除了换行符 |
import re
M = "hello world"
RR = re.match("Hello",M,re.I)
print(RR)
print("=============")
s = """hello
world
"""
result = re.match("hello.*",s,re.S)
print(result)
print(result.group())
以上就是今天学习的内容,本文仅仅简单学习了python的正则表达式(代表字符、代表数量、代表边界等)。