入门
\d
可以匹配一个数字
\w
可以匹配一个字母或者数字
\s
可以匹配空白符号,空格,制表符
.
可以匹配任意一个字符
要匹配变长的字符,在正则表达式中
-
用
*
表示任意个字符(包括0个) -
用
+
表示至少一个字符 -
用
?
表示0个或1个字符 -
用
{n}
表示n个字符 -
用
{n,m}
表示n-m个字符
进阶
要做更精确地匹配,可以用[]
表示范围,比如:
[0-9a-zA-Z\_]
可以匹配一个数字、字母或者下划线;[0-9a-zA-Z\_]+
可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100'
,'0_Z'
,'Py3000'
等等;[a-zA-Z\_][0-9a-zA-Z\_]*
可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}
更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B
可以匹配A或B,所以(P|p)ython
可以匹配'Python'
或者'python'
。
^
表示行的开头,^\d
表示必须以数字开头。
$
表示行的结束,\d$
表示必须以数字结束。
你可能注意到了,py
也可以匹配'python'
,但是加上^py$
就变成了整行匹配,就只能匹配'py'
了。
切分字符串
s = 'a b c'
t = s.split(' ')
print(t)
print(re.split(r'[\s\,]', 'a,b,c d'))
print(re.split(r'\s+', 'a b c d'))
常用的函数
re.match()
从指定字符串的开始位置进行匹配,匹配成功则继续匹配,否则返回None
re.search()
扫描整个字符串,返回第一个匹配成功的字符串,否则返回 None
re.findall()
扫描整个字符串,通过列表形式返回所有符合的字符串
re.sub()
替换字符串中的内容
re.split()
用于将字符串分割
# matching string
import re
pattern1 = "cat"
pattern2 = "bird"
string = "dog runs to cat"
# print(pattern1 in string)
# print(pattern2 in string)
ptn = r"r[au]n"
# print(re.search(ptn, string))
# print(re.search(pattern2, string))
print(re.search(r"r[A-Z]n", "dog runs to cat"))
print(re.search(r"r[a-z]n", "dog runs to cat"))
print(re.search(r"r[0-9]n", "dog runs to cat"))
print(re.search(r"r[0-9a-z]n", "dog runs to cat"))
# 数字
# \d : decimal digit 匹配单个数字
print(re.search(r"r\dn", "dog r1ns to cat"))
# \D : any non-decimal digit 匹配非数字
print(re.search(r"r\Dn", "dog r1ns to cat"))
# 空白
# \s : any white space [\t\n\r\f\v]
print(re.search(r"r\sn", "r\nn r5n"))
# \S : opposite to \s, any non-white space
print(re.search(r"r\Sn", "r\nn r5n"))
# 所有的字母数字和 _
# \w : [a-zA-Z0-9_]
print(re.search(r"r\wn", "r\nn r5n"))
# \W : opposite to \w
print(re.search(r"r\Wn", "r\nn r5n"))
# 转义字符
# \\ : match \
# 句尾句首
# ^ : match line begging
print(re.search(r"^dog", string))
# $ : match line ending
print(re.search(r"cat$", string))
# 是否
# ? : may or may not occur
print(re.search(r"Mon(day)?", "Monday"))
print(re.search(r"Mon(day)?", "Mon"))
# 0 或 多次
# *
# 1 或 多次
# +
# 可选次数
# {n, m}