本文已参与「新人创作礼」活动,一起开启掘金创作之路。
导入模块
import re
常用函数
匹配开头满足条件的字符
ret=re.match("c","ccc")
print(ret.group())
# return: c
ret=re.match("c","acc")
print(ret.group())
# return: AttributeError
匹配满足条件的字符
ret=re.search("c","acb")
print(ret.group()) # return: c
"""
re.match和re.search函数的区别在于:
re.match函数仅匹配字符串的开头,如果不满足条件则返回None;
re.search函数会匹配整个字符串
"""
分组
txt="book price is $9,pen price is $8."
ret=re.search(".+(\$\d+).+(\$\d+)",txt)
print(ret.group()) # book price is $9,pen price is $8
print(ret.group(1)) # $9
print(ret.group(2)) # $8
查找所有满足条件
ret=re.findall("abc","abc,abc,abc") # 返回一个list
print(ret)
# return: ['abc', 'abc', 'abc']
根据规则替换其他字符串
ret=re.sub("\d+?","n","123")
print(ret)
# return: nnn
根据规则切割字符串
ret=re.split('\d+',"aaa11bbb33e")
print(ret)
# return: ['aaa', 'bbb', 'e']
提前编译正则表达式
r=re.compile("\d+\.?\d+") # 提前编译
ret=re.search(r,"book price is 10.32 yuan")
print(ret.group())
正则表达式添加注释
r = re.compile(
"""
\d+ # 整数
\.? # 小数点
\d+ # 小数
"""
, re.VERBOSE)
ret = re.search("""
\d+ # 整数
\.? # 小数点
\d+ # 小数
""", "book price is 10.32 yuan",re.VERBOSE)
基础语法
限定符
匹配1个或多个表达式
ret=re.match('q+',"qqqt")
# return: qqq
# 如果不存在匹配的字符,会产生AttributeError
匹配0个或多个表达式
ret=re.match('q*',"aqqqq")
# return:
匹配0个或1个表达式
ret=re.match('q?',"qqq")
# return: q
匹配n个字符
ret=re.match('\d{3}',"123456") # {n}
# return: 123
匹配n-m个字符
ret=re.match('\d{1,3}',"123456") # {min,max}
# return: 123 [优先满足max]
元字符
匹配任一字符串
ret=re.match('q',"qwer")
# return: q
匹配任意字符('\n'除外)
ret=re.match('.+',"qwer\nt") # .
# return: qwer
匹配任意的数字
ret=re.match('\d+',"13455erw") # \d
# return: 13455
匹配任意的非数字
ret=re.match('\D+',".!~132") # \D
# return: .!~
匹配空白字符(\n \t \r 空格)
ret=re.match('\s',"\n111") # \s
print("$$$"+ret.group()+"$$$")
"""
return:
$$$
$$$
"""
匹配非空白字符
ret=re.match('\S+',"11") # \S
# return: 11
匹配[a-z]和[A-Z]、数字和下划线(Python定义变量的规则)
ret=re.match('\w+',"azAK_\nt") # \w
print(ret.group()+"$$$")
# return: azAK_$$$
匹配除[a-z,A-Z,0-9,_ ]外的字符
ret=re.match('\W+',"\n\t123") # \W
print("$$$"+ret.group()+"$$$")
"""
return:
$$$
$$$
"""
组合匹配
# 只要满足任意规则
ret=re.match('[\da-z]+',"132skLI~") # []
# return: 132sk
取反匹配 | 行首字符 | 结尾字符
# 取反匹配
ret=re.match('[^\d]+',"abc~1") # ^
# return: abc~
# 行首字符
ret=re.search("^abc","abcd") # 等同于re.search("abc","abcd")
# return: abc
# 结尾字符
ret=re.search("abc$","iiiabc")
# return: abc
# 匹配空字符
ret=re.search("^$","") # 匹配以空字符开头和空字符结尾
# return: ""
匹配多个字符串或表达式
ret=re.search("ftp|http|https","https://edu.csdn.net/")
# return: http 按顺序进行匹配
贪婪模式和非贪婪模式
html=html = '<div class="navigation"><li<ahref="https://pass">账号设置</a></li></div> '
# 贪婪模式
ret=re.search("<.+>",html) [会将开头出现的<和结尾出现的>相互匹配]
print(ret.group())
# return: <div class="navigation"><li<ahref="https://pass">账号设置</a></li></div>
# 非贪婪模式
ret=re.search("<.+?>",html) [匹配第一个出现的<第一个出现的>]
print(ret.group())
# return: <div class="navigation">
转义字符
Python中的转义字符
txt=r"This is \n" # 转义字符r
# return: This is \n
正则表达式的转义字符
ret=re.findall("a\*+","bca* lkfa*") # 匹配a*
# return: ['a*', 'a*']
原生字符串和正则表达式
ret=re.search("\\\\c","abc\c")
# return: \c
正则表达式的字符串解析规则:
- 先将字符串在Python语言层面中进行解析
- 将得到的结果再放到正则表达式层面中进行解析
\\\\c -->[Python语言层面] \\c -->[正则表达式层面] \c
笔记下载
https://download.csdn.net/download/weixin_45564816/85052061