可以用于 判断用户的输入是否符合要求;或者 在使用爬虫时 匹配资源的网址
在Python中使用 正则表达式 需要 使用 re 模块
import re
result = re.match(正则表达式,要匹配的字符串)
match默认从头匹配
提取数据
result.group()
匹配一个数字: \d ,就是 0 - 9
re.math(r"变形金刚\d","变形金刚3")
匹配一组里的任意一个 : [ 12345 ] ,[ 123-8abc-g ]
在中括号里可以 是 数字或字母 (可以大小写)
一段连续的 : [ 1-5 ]
不连续的可以 分别输入 [ 136 ]
有段连续,有段不连续 : [ 1-36-9 ]
re.math(r"变形金刚[1-36-9]","变形金刚7")
还有反向字符集匹配: [^123] 或 [^1-3]
匹配 不是 123 的任何其他字符;或 匹配不在 1-3范围内的任意其他字符。
匹配任意一个字符: . 点号 ;除了换行符 \n
匹配非数字 : \D
匹配空白 : \s ,就是 空格 ,tab键
匹配非空白 : \S
匹配单词字符: \w ,包括 a-z,A-Z,0-9,_
匹配非单词字符: \W
{n} 或 {m,n}
紧跟在 {} 前的那个字符 必须有n 个字符,或 可以有 m 到 n 的任意多个。
需要满足 前面那个字符的要求,例如 \d{11} ,就需要输入 11 位数字。
?
紧跟在?前的那个字符 ,可以有也可以没有,一次或0次
re.match(r"\d{3,4}-?\d{7,8}")
匹配电话号码 021-1234567,或 0213-12345678
*
前面的一个字符可以 重复任意次,可以没有
+
前面的一个字符可以 出现一次或多次,必须出现一次
^
匹配字符串开头,
当这个字符,没有出现在 正则表达式的首位时,只表示 普通字符 ^
$
匹配字符串结尾
在末尾加上 $ , 表示需要匹配到字符串的末尾才算匹配成功
如果要匹配的字符串 用到了 特殊字符,比如 . ? + 等 . , 那么需要用 转义字符 \ 给修饰一下
()
分组的作用,把整个字符串,可以分为单独的块,之后可以单独取出来。
用 group(1) ,可以取出 第一个() 里的内容
如果前面匹配的内容,在后面也有相同的要匹配,可以把前面的用()括起来,在后面用 \第几个括号 \1 或 \2 ,来引用前面匹配的值。
re.match(r" <(\w*)>.*\1> ")
分组 还可以 起别名 (?P<别名> 内容) ,引用时 ( ?P=别名 )
|
类似于 或 ,
(162 | 163 | 137) 就是可有匹配三个中的任意一个
search
不从头开始,只要匹配到第一个满足的 就返回
例如匹配出文章的阅读次数
re.search(r"\d+","阅读次数为:9999").group() // 9999
findall
不从头开始,把所有满足的都匹配出来 并返回
例如 统计出Python,Scala 相应文章的阅读次数
re.findall(r"\d+","python : 9999, scala : 9996").group() // ['9999','9996']
sub
把匹配到的字符 换为 给定的字符
例如
re.sub(r"\d+","998","python = 996") // python = 998 ,不用group() ,会直接返回
还可以调用函数
def add(temp):
strNum = temp.group()
num = int(strNum) + 1
return str(num)
re.sub(r"\d+", add ,"python = 996") // python = 998
split
根据匹配进行切割字符串,返回一个列表
根据 空格 或 : 分割
re.split(r": | ","info:scala 3") // 会直接返回 ['info','scala','3']