1.匹配单个字符

语法:

ret = re.match(r"速度与激情\d", “速度与激情5”)
1.使用反斜杠d 可以使用户输入任意的一位数字,当用户需要查找速度与激情55时
\d\d两个反斜杠d就可以解决

2.也可以使用 [1234567] ,这样用户输入的值就只能在这里面匹配了
或输入 [1-7],与上述一致,也是1到7数字
或输入 [1-36-8],即用户输入1到3,6到8符合规则
或输入 [1-8abcd] 即用户输入 1到8数字或者 a-d字母 符合规则
如果[] 中没有 9,用户输入了9 那么没有返回值,即用户输入的值,不符合要求

3.\w 匹配 0-9, a-z ,A-Z,中文,都可以,即字母、数字、下划线、汉字

4.\s 匹配空白字符 即:空格,Tab键

5.\D 匹配非数字, \S 匹配非空白 ,\W 匹配非单词 也就是与小写的自己相反
6. . 点 匹配任意字符,除\n ,最为宽广,. 意味只能输入.

注意:以上用法,只能匹配一个字符

# 匹配1-2位任意数字
    ret = re.match(r"\d{1,2}", "22").group()

    # 匹配3位数字, 少一位都不行
    ret = re.match(r"\d{3}", "666").group()

2.匹配多个字符

re.match(r"速度与激情\d{1,2}", “速度与激情5”).group()

  1. \d{1,2}: 如此限制,用户可以输入1-2位任意数字
    即:re.match(r"速度与激情\d{1,2}", “速度与激情5”).group() 成立
    re.match(r"速度与激情\d{1,2}", “速度与激情55”).group() 成立
  2. re.match(r"\d{11}", “12345678901”).group()
    即:限制输入 11位数字 ,多和少都不行
  3. ?的作用:
    re.match(r"021-?\d{8}", “02112345678”).group()
    输出: ‘02112345678’
    re.match(r"021-?\d{8}", “021-12345678”).group()
    输出: ‘021-12345678’
    即: ?匹配前一个字符出现1次或者0次,要么有1次,要么没有,也不允许多

4.* 的作用:*
即:匹配前一个字符出现0次 或者无限次,即可有可无

5.+ 的作用:
即:匹配前一个字符出现1次或者无限次,即至少有一次

注意:最重要的是,{} 一定要基于前面的条件,若前面无条件,则不能使用
大括号{} 前的条件是什么就要满足 比如\d{} 即满足连续的数字
A{3},即连续的3个大A

3.匹配开头结尾

注意:match()方法,自带匹配判断 开头,但是其没有判断结尾

  1. $ 作用:
    匹配字符串结尾
  2. ^作用:
    匹配字符串结尾
规范写法:ret = re.match(r"^[a-zA-Z_][a-zA-Z_0-9]*$", name)
	前后都需要加上 ^,$

4.需要匹配163邮箱的格式

1.在@前 有4-20位
2.后缀统一 @163.com

re.match(r"^[a-zA-Z_0-9]{4,20}@163\.com$", email)

问题:点 . 在使用中意味随意任何字符都行,除\n 则:laowang@163Acom 符合规范
此时使用 . 可以使 用户只能输入 .点 ,达到需求

注意:
如果在正则表达式中,需要用到 . ? 等,仅仅需要在他们前面添加一个 反斜杠\ 进行转义

5.分组等

1. | 的作用

ret = re.match(r"^[a-zA-Z_0-9]{4,20}@163|135\.com$", "laowang@163.com")

输出:laowang@163
注意:不会输出 .com

ret = re.match(r"^[a-zA-Z_0-9]{4,20}@(163|126)\.com$", content)

添加括号(A|B|C)。。。就可以识别 A,B,C

2. (ab)的作用

将括号中字符作为一个分组

可以使用 返回值.group(1) 取到 括号里的值,但是,这个值是基于 正则匹配成功的值
例:laowang@163.com ,则返回值.group(1) 为163
例:laowang@126.com, 则返回值.group(1) 为126

同样,可以括号多个来取不同的值

例:ret = re.match(r"^([a-zA-Z_0-9]{4,20})@(163|126)\.com$", "laowang@126.com")

在[] 前加括号,返回值.group(1) 就是 laowang,返回值.group(2) 为126

3. \num的作用

引用分组num匹配到的字符串

ret = re.match(r"<(\w*)>.*</\1>", "<h2>hahaha</h2>")
	print(ret.group())
	输出:<h2>hahaha</h2>
	<(\w*)> 匹配 <h2>,
	.* 匹配 hahaha,
	</\1> 匹配 </h2>

提示:\1的作用是:将第一个括号里的值 与其一致

同理:

ret =re.match(r"<(\w*)><(\w*)>.*</\2></\1>", "<body><h2>hahaha</h2></body>")
	print(ret.group())
	输出:<body><h2>hahaha</h2></body>

两两对应。

6.re高级用法

1.search方法作用
查找客户输入的第一个需要的值
ret = re.search(r"\d+", “阅读:99999,点赞1000”)
print(ret.group())
输出:99999
提示:search方法 找到第一个值就会返回

可否变成 match方法,只要在ret = re.search(r"^\d+", “阅读:99999,点赞1000”)
开头加上 ^ 从头开始查找,但是程序会挂。

2.findall作用
ret = re.findall(r"\d+", “阅读99999,点赞1000”)
print(ret)
输出:[‘99999’, ‘1000’] 是一个列表
注意:不能再使用 group() 方法显示

3.sub将匹配到的数据替换
ret = re.sub(r"\d+",“1024”, “阅读99999,点赞1000,你好”)
print(ret)
输出:阅读1024,点赞1024,你好 —是一个字符串
把符合要求的地方替换为1024,并且返回整个字符串

扩展:
ret = re.sub(r"\d+", add, “点赞数 = 99”)
sub方法可以 使参数里面 添加函数引用

4.split 根据匹配进行切割字符串,并返回一个列表

ret = re.split(r":| ", "info:zhalao 33 1000 shandong:2")
	print(ret)
输出:['info', 'zhalao', '33', '1000', 'shandong', '2']---返回一个列表
使用 冒号:或者 空格 切割。

博主萌新,不足之处望各位之处
此篇文章基于python re模块