re模块


官方文档:https://docs.python.org/zh-cn/3/library/re.html

python函数

re.match(pattern,str)
从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.search()
扫描整个字符串并返回第一个成功的匹配。

re.compile()
用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

re.findall()
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

import re
print(re.match("h","hello"))
print(re.match("el","hello"))
print(re.match("h","hello").span())

#--> <re.Match object; span=(0, 1), match='h'>
#--> None
#--> (0,1)

正则符号


[ ]
匹配需要的字符集合,如[1-3][123]都是匹配1、2或者3。


( )
捕获需要的字符。


(?: )
非捕获分组。


^:脱字符号。
方括号中加入脱字符号,就是匹配未列出的所有其他字符,如[^a]匹配除a以外的所有其他字符。


\
和python字符串使用规则一样,可以匹配特殊字符本身。
\d表示匹配0到9的任意一个数字字符,而\\d则表示匹配\d本身。


|
相当于或


多次匹配

  • * : 匹配前一个字符0到n次,如pytho*n可以匹配pythn、pytoon、pythooooon等。
  • ? : 匹配前一个字符0或1次。
  • + : 匹配前一个字符1到n次。等价于{1,}
  • {n,m} : 匹配前一个字符n次到m次。
  • {n}: 匹配前一个字符n次。

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符
\s 匹配任意空白字符,等价于 [\t\n\r\f]。
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9]。
\D 匹配任意非数字
\w 匹配数字字母下划线
\W 匹配非数字字母下划线
\A 匹配字符串开始
\z 匹配字符串结束
\b 匹配一个单词边界。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。

正则匹配修饰符re.S使 . 匹配包括换行在内的所有字符

python实践

re.findall("d(ds)*","askldjasaddsa") #-->['', 'ds']
re.findall("d[ds]*","askldjasaddsa") #-->['d', 'dds']
re.findall("d{ds}*","askldjasaddsa") #-->[]
re.findall("d{ds}","askldjasad{ds}a") #-->['d{ds}']
re.findall("ds?","askldjasad{dsssssss}a") #-->['d', 'd', 'ds']

非贪婪模式与贪婪模式:

re.compile("/(\S*?)/").findall("//asd/sdsa/asda") #-->['', 'sdsa']
re.compile("/(\S*)/").findall("//asd/sdsa/asda")  #-->['/asd/sdsa']

#'*', '+',和 '?' 修饰符都是贪婪的;它们在字符串进行尽可能多的匹配。

正则实践


(\w)(\w)\2\1 可以匹配ABBA型数据(回溯引用)


http.*/$ 匹配以http开头,以/结尾的数据


^\d{n}$ 匹配n位的数字


^(?!(xx+)\1+$)x* 匹配质数个x,不懂


2002-1-2 2020-01-02 2020.01.02 2020 01 02 20200102 2020/01/02提取年月日的数据
(\d{4})[\-/\s]?(\d{1,2})[\-/\s]?{\d{1,2}}


小结

ennn,入门应该够了,漏掉了先行断言,(?.....)等等
正则表达式太强了,还能密码强度认证


文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录