正则表达式简介及使用介绍(含实例)

5.正则表达式

5.1 正则表达式的概念与作用

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

5.2 正则表达式的常见语法

一般字符匹配自身a,b,c…a,b,c…
.匹配任意除换行符“\n”外的字符a.cabc,acc,ac…
\转义字符,使后一个字符改变原来的意思
如果字符串中有*需要匹配,可以用*
a\.c
a\\c
a.c
a\c
[…]字符集,对应的位置可以是字符集中的任意字符。
字符集的内容既可以依次列出,也可以给顶范围,
而第一个字符为^abc表示除abc外的任意字符
字符集中要使用]等字符时,要使用\斜杠
a[bcd]eabe
ace
ade
预定义字符含义例子匹配实例
\d数字:[0-9]a\dca1c
\D非数字:[^\d]a\Dcabc
\s空白字符:<空格>a\sca c
\S非空白字符a\Scabc
\w单词字符:[A-Z0-9a-z]a\wcabc
\W非单词字符:[^\w]a\Wca c
数量词含义例子匹配实例
*匹配前一个字符0或多次abc*ab
abccc
+匹配前一个字符一次或多次abc+abc
abcccc
?匹配前一个字符一次或零次abc?ab
abc
{m}匹配前一个字符m次ab{2}cabbc

5.3 使用实例代码

#导入正则模块
import re

#字符匹配
text = "anabddjajsajdsacdjhadcdjakskabc"
rs = re.findall('abc', text)#普通字符匹配,第一个参数为查找的目标字符串,而第二个参数为查找范围
rs1 = re.findall('a.c', text)#特殊字符的匹配
rs2 = re.findall('a[bc]d', text)#字符集匹配
rs3 = re.findall('a\d*', 'a123')

print(rs)
print(rs1)#返回的是所有的目标的数据
print(rs2)
print(rs3)

5.4 findall方法详解

  • re.findall(pattern, string ,flags=0):

    • 作用:扫描整个string字符串,返回与所有pattern匹配的列表;
    • 参数:
      • pattern:正则表达式;
      • string:从哪个字符串中查找;
      • flags: 匹配模式(可以通过匹配模式flag=re.DOTALL或re.S,让’.'也能匹配上换行符);
    • 返回值:返回与string中与pattern匹配结果相同的所有列表;
  • findall方法中分组功能的使用:

    #findall方法中分组的使用
    rs4 = re.findall('a.+bc', 'a\nbc', re.DOTALL)
    rs5 = re.findall('a(.+)bc', 'a\nbc', re.DOTALL)#分组
    print(rs4)
    print(rs5)#仅返回与小括号内容中相同的字符,外部字符仅用于定位,此时返回为“\n”
    

5.5 正则表达式子中r原串的使用

用于解决写正则的时候,消除转义序列或是不符合PEP8 规范的问题。

#1.不使用r原串时,遇到转义字符如何处理

rs6 = re.findall('a\nbc', 'a\nbc')
rs7 = re.findall('a\\nbc', 'a\\nbc')#此时string中的\n为非转义符
rs8 = re.findall('a\\\\nbc', 'a\\nbc')
print(rs6)#此时可以正常匹配
print(rs7)#此时匹配失败
print(rs8)#此时匹配成功,在正则表达式中要匹配一个转义符需写4个转义符

#2.r原串就是在正则中消除转义符带来的影响
rs9 = re.findall(r'a\\nbc', 'a\\nbc')
print(rs9)#匹配成功

5.6 案例: 提取最新的疫情数据的json字符串

#1.请求疫情数据首页
import requests
from bs4 import BeautifulSoup

response = requests.get("http://ncov.dxy.cn/ncovh5/view/pneumonia")
home_page = response.content.decode()

soup = BeautifulSoup(home_page, 'html.parser')
script = soup.find(attrs={'id': "getListByCountryTypeService2true"})
text = script.string
# print(text)

#2.使用正则表达式提取json字符串
import re
json_str = re.findall(r"\[(.+)\]", text)[0]#由于json字符串返回的是一个列表,我们这里仅需要其第一个元素
print(json_str)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值