正则表达式常用操作

正则表达式的概念与作用

概念:正则表达式是一种字符串匹配的模式
作用:检查一个字符串是否含有某个子串;替换匹配的子串;提取某个字符串中的子串(爬虫中常用)

示例

#先导入模块
import re

普通字符匹配

print(re.findall('abc','abc'))#有就返回
print(re.findall('abc','adc'))#adc中没有abc所以就返回空
print(re.findall('abc','dabcf'))#只要里面有abc就行
print(re.findall('dabcf','abc'))#反过来当然不行了

[‘abc’]
[]
[‘abc’]
[]

点号

#可以匹配除了换行符以外的任意一个字符
print(re.findall('a.c','abc'))
print(re.findall('a.c','a&c'))
print(re.findall('a...c','abddc'))
print(re.findall('a.c','a\nc'))#换行符就不行了

[‘abc’]
[‘a&c’]
[‘abddc’]
[]

print(re.findall('a.c','a.c'))
print(re.findall('a\.c','a.c'))#要是我只想匹配 点符号   可以试一下转义符
print(re.findall('a\.c','abc'))#此时abc就不行了,转义符号的作用就发挥出来了

[‘a.c’]
[‘a.c’]
[]

中括号

#中括号里面是否包含 后面
print(re.findall('a[bc]d','abd'))
print(re.findall('a[bc]d','acd'))
print(re.findall('a[bc]d','aed'))

[‘abd’]
[‘acd’]
[]

预定义的字符集

在这里插入图片描述

print(re.findall('\d','123'))#可以看到\d是可以匹配的,但是都分开了,因为d一次匹配一个字符)
print(re.findall('\w','Az123'))#\w可以匹配字符和数字
print(re.findall('\w','Az123中文'))#中文也是可以的
print(re.findall('\w','Az123中文$%^'))#特殊字符就不行了

[‘1’, ‘2’, ‘3’]
[‘A’, ‘z’, ‘1’, ‘2’, ‘3’]
[‘A’, ‘z’, ‘1’, ‘2’, ‘3’, ‘中’, ‘文’]
[‘A’, ‘z’, ‘1’, ‘2’, ‘3’, ‘中’, ‘文’]

数量词

print(re.findall('abc*','abcc'))#两次c是可以的
print(re.findall('abc*','abccc'))#3次c是可以的
print(re.findall('abc*','ab'))#0次也是可以的
print(re.findall('abc*','abc'))#一次也是可以的

[‘abcc’]
[‘abccc’]
[‘ab’]
[‘abc’]

print(re.findall('a\d*','a123'))# \d可以匹配数字
print(re.findall('a\d*','a1234'))
print("看图查表就行了 不意义列举")

[‘a123’]
[‘a1234’]

findall()方法

import re
## findall方法,返回匹配的结果列表#
print(re.findall('\d','chaun12zhi24'))#因为\d匹配数字,匹配一个字符,所以就返回了下面几个数字
print(re.findall('\d+','chaun12zhi24'))#符号“+”的作用就显示出来了 匹配前一个字符一次或者无限次 这里是数字

[‘1’, ‘2’, ‘2’, ‘4’]
[‘12’, ‘24’]

## findall方法中flag参数的作用
print(re.findall('a.bc','a\nbc'))#此时匹配不了,前面 .和\n 不能匹配
print(re.findall('a.bc','a\nbc',re.DOTALL))#这样 点符号就可以匹配任何字符了 包括换行符
print(re.findall('a.bc','a\nbc',re.S))#这样 点符号就可以匹配任何字符了 包括换行符

[]
[‘a\nbc’]
[‘a\nbc’]

## findall方法中flag分组的使用
print(re.findall('a.+bc','a\nbc',re.DOTALL))#如果没有()则返回与整个正则匹配的列表
print(re.findall('a(.+)bc','a\nbc',re.DOTALL))#如果有()则只返回()里面的内容,小括号两边的东西负责确定提取数据所在位置

[‘a\nbc’]
[’\n’]

r原串

#1在不使用r原串的时候,遇到转移字符怎么做
print(re.findall('a\nbc','a\nbc'))#这个时候可以匹配成功
print(re.findall('a\\nbc','a\\nbc'))#这两种情况都匹配不上
print(re.findall('a\nbc','a\\nbc'))#这两种情况都匹配不上
print(re.findall('a\\\nbc','a\\nbc'))#三个斜杠匹配不上
print(re.findall('a\\\\nbc','a\\nbc'))#4个斜杠匹配上了 官方文档就这么规定的

[‘a\nbc’]
[]
[]
[]
[‘a\nbc’]

print(re.findall(r'a\nbc','a\nbc'))#r原串在正则中就可以消除转义符带来的影响
print(re.findall(r'\d','a123'))#扩展:可以解决写正则的时候,不符合PEP8规范的问题

[‘a\nbc’]
[‘1’, ‘2’, ‘3’]

总结

不一定全部都记住,会用会查就OK(如果您发现我哪里写的不对,欢迎在评论区批评指正)。

猜你喜欢

转载自blog.csdn.net/qq_27328197/article/details/114033442