正则表达式练习(正则表达式训练)
本篇文章给大家谈谈正则表达式练习,以及正则表达式训练对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
正则表达式
main role="main" class="App-main" style="padding-bottom: 46px;"
首发于 Python办公自动化
无障碍 写文章
登录
article class="Post-Main Post-NormalMain" tabindex="-1" style="box-sizing: border-box; outline: none;"
header class="Post-Header" style="margin: 0px auto; width: 690px;"
第一小乔乔
进一步,是一步。一起工作进步,厨艺精进,生活美满。
22 人赞同了该文章
/header
[图片上传失败...(image-f7fc00-1650193970962)]
match()和search()都只匹配出一个符合条件的字符串,若想要所有,可以使用re.findall()
# 用[]{}判断密码是否符合要求 :密码是由数字和字母组成,并且位数是6-16位
##用split按-或者空白格分割字段
结果:['ahsb1sssa8', 'jjhd7nhs', '90nsjhf3', '4hh', 'h7', '8kjj', 'sfav']
#用sub替换符合条件的关键词, 试试马赛克脏话(想起农药不能痛骂队友的愤怒)
##练练转义
## findall返回符合表达式的子串
一、正则表达式语法
正则表达式是用匹配或者描述字符串的工具。
用处:
a.判断字符串是否满足某个条件---判断输入的字符串是否是邮箱/手机号码。是否是ip地址
b.提取满足条件的字符串
c.字符串替换
Python中通过re模块中相应的方法来支持正则表达式的匹配、查找和替换等功能
fullmatch(正则表达式字符串, 字符串) --- 判断正则表达式和字符串是否完全匹配
正则表达式字符串: 就是一个字符串,字符串中是正则表达式语法。r'正则表达式'
正则表敏厅达桥盯隐式中包含两个部分,一个是正则语法对应的字符,二个是普通字符
1 .(点)(匹配任意字符)
一个.只匹配一个任意字符
2 \w(匹配字母数字下划线)
一则耐个\w匹配一个字符
3 \s(匹配任意空白字符)
空白字符: 空格、制表符(\t)、回车(换行\n)等,都输入空白字符
一个\s匹配一个空白字符
4 \d(匹配数字字符)
一个\b不会去匹配一个字符,而是单纯的检测\b出现的位置是否是单词边界
单词边界: 字符串开始和结尾、空格、换行、标点符号等,可以将两个单词隔开的字符都单词边界
6 ^(检测是否是字符串开头)
re_str = r'^\d\d\d' # 判断一个字符串是否是三个数字开头
7 $(检测是否是字符串结尾)
8 \W(匹配非字母、数字下划线)
9 \S(匹配非空白字符)
10 \D(匹配非数字字符)
11 \B(检测是否不是单词边界)
12 [] (匹配中括号中出现的任意一个字符)
一个[]匹配一个字符
[字符集] -- 匹配一个字符,这字符是字符集中的任意一个字符
例如:[abc], [\d+]
[字符1-字符2] -- 匹配一个字符,这个字符是Unicode编码值在字符1到字符2中的任意一个字符;要求字符1的编码值要小于字符2
例如:[1-9] -- 数字1到9 [a-z] -- 小写字母 [A-Z] -- 大写字母
[\u0031-\u0039] -- 数字1到9
[\u4E00-\u9fa5] -- 匹配所有的汉字
注意:-在中括号中,如果放在两个字符之间表示范围。
13 [^字符集] (匹配一个不在字符集中的任意字符)
注意:^必须放在中括号中的最前面才有效
二、正则表达式次数相关符号
from re import fullmatch
1. *(匹配0次或者多次)
字符* -- 字符出现0次或者多次
2. +(匹配一次或者多次)
3. ?(匹配0次或者1一次)
练习:写一个正则表达式,匹配所有的整数(123, -2334, +9...可以匹配的,012, -023,+0122不能匹配)
{N} -- 匹配N次
{M,N} -- 匹配M到N次
{M,} -- 至少匹配M次
{,N} -- 最多匹配N次
三、分之和分组
import re
1. |(分之)
条件1|条件2 -- 先用条件1去匹配,如果匹配成功就匹配成功。如果条件1匹配失败,用条件2去匹配。
注意:如果条件1匹配成功就不会用条件2再去匹配
能匹配成功时abc,d和aaa
'abc'+W/H/Y
2. ()(分组)
a.组合(将括号中的内容作为一个整体进行操作)
b.捕获 -- 使用带括号的正则表达式匹配成功后,只获取括号中的内容
c.重复 -- 在正则表达式中可以通过\数字来重复前面()中匹配到的结果。数字代表前第几个分组
a.组合
匹配一个字符串,以数字字母的组合出现3次
b.捕获
c.重复
3.转义符号
正则表达式中可以通过在特殊的符号前加\,来让特殊的符号没有意义
. -- 任意字符 . -- 字符.
注意:在中括号有特殊功能的符号,只代表符号本身
\不管在哪儿都需要转义
-在[]外面没有特殊功能,在[]中要表示-本身,就不要放在两个字符之间
()需要转义
四、re模块中的函数
import re
1. compile
compile(正则表达式字符串) -- 将正则表达式字符串转换成正则表达式对象
2. fullmatch和match
fullmatch(正则表达式字符串, 字符串)
-- 用正则表达式去完全匹配字符串(匹配整个字符串),返回匹配对象(SRE_Match)或者None
match(正则表达式字符串, 字符串)
-- 匹配字符串开头,返回匹配对象或者None
1.span(group=0) -- 获取匹配成功的区间(左闭右开区间)
print(result.span(0))
print(result.start(1)) # 获取匹配到的开始下标
print(result.end(1)) # 获取匹配到的结束下标后的下标
2.group(group = 0) -- 获取匹配结果
group()/group(0) -- 获取正则表达式完全匹配的结果
group(index0) -- 获取正则表达式中第group个分组匹配到的结果
3.string -- 获取被匹配的原字符串
3.search
search(正则表达式, 字符串)
-- 查找字符串中满足正则表达式的第一个字符串。返回值是匹配对象或者None
练习:使用search匹配出一个字符串中所有的数字字符串'abc34jshd8923jkshd9lkkk890k' -- 34,8923,9,890
4.findall
findall(正则表达式, 字符串) -- 获取字符串中满足正则表达式的所有的子串,返回一个列表
注意:如果正在表达式中有分组,取值的时候只取分组中匹配到的结果;
如果有多个分组,会将每个分组匹配到的结果作为一个元祖的元素
5.finditer
finditer(正则表达式, 字符串)
-- 查找所有满足正则条件的子串,返回值是迭代器,迭代器中的元素是匹配对象
6. split
split(正则表达式,字符串) -- 将字符串按照满足正则表达式条件的子串进行分割
"""
str1 = 'ahsb1sssa8-jjhd7nhs+90nsjhf3-4hhh7+8kjj-'
result = re.split(r'[-+]', str1)
print(result)
7.sub
sub(正则表达式,repl,字符串) -- 将字符串中满足正则表达式条件的子串替换成repl。返回替换后的字符串
作业
1. 写一个正则表达式判断一个字符串是否是ip地址
规则:一个ip地址由4个数字组成,每个数字之间用.连接。每个数字的大小是0-255 例如:255.189.10.37 正确 256.189.89.9 错误
2. 计算一个字符串中所有的数字的和
例如:字符串是:‘hello90abc 78sjh12.5’ 结果是90+78+12.5 = 180.5
3. 验证输入的内容只能是汉字
4. 电话号码的验证
二、不定项选择题
编辑于 2020-12-21 17:02
Python
正则表达式
赞同 22
3 条评论
分享
/article
[图片上传失败...(image-b1d3-1650193970960)]
懒人必备
[[图片上传失败...(image-645a0f-1650193970961)]
裸睡的猪发表于猪哥的Py...]( )
[# 【Python】正则表达式基础知识
正则表达式(regular expression)是一种处理字符串的工具,功能十分强大。正则表达式使用预定义的特定模式去匹配一类具有共同特征的字符串,主要用于字符串处理,可以快速,准确地完成复杂…
长弓瑾瑜]( )
[[图片上传失败...(image-c617e9-1650193970961)]
123456]( )
[# Python之正则表达式入门
前言:此文实际上是本人在慕课学习北京理工大学课程:Python网络爬虫与信息提取 一课所做的一部分笔记,是作为初学者的入门笔记,自然有许多遗漏或者疏忽,欢迎大家指出。一、正则表达式基…
热水]( )
切换为时间排序
写下你的评论...
label class="UploadPicture-wrapper" style="cursor: pointer;"/label
发布
/main
label class="Editable-languageSuggestionsInput Input-wrapper" style="position: relative; display: flex; -webkit-box-align: center; align-items: center; width: 180px; height: 34px; padding: 4px 10px; font-size: 14px; background: rgb(255, 255, 255); border: 1px solid rgb(235, 235, 235); border-radius: 3px; box-sizing: border-box; transition: background 0.2s ease 0s, border 0.2s ease 0s; cursor: pointer;"input autocomplete="off" role="combobox" aria-expanded="false" aria-autocomplete="list" aria-activedescendant="AutoComplete17-0" id="Popover16-toggle" aria-haspopup="true" aria-owns="Popover16-content" class="Input" placeholder="选择语言" value="" style="-webkit-box-flex: 1; flex: 1 1 0%; padding: 0px; overflow: hidden; font-family: inherit; font-size: inherit; font-weight: inherit; background: transparent; border: none; resize: none; color: rgb(18, 18, 18); height: 24px; line-height: 24px; cursor: inherit;"/label
[img]JS正则表达式
一. 正则表达式
正则表达式:其实就是一种匹配规则,用于检索字符串
定义正则表达式的两种方式:1.直接定义 2.构造函数定义
那么正则表达式正则强大的地方是它可以写 通配符(拥有特殊含义的字符)
二. 通配符
\w 表示:字母、数字、下划线
\W 表示:除了字母、数字、下划线以外的字符
\d 表示:数字
\D 表示:非数字
^ 表示:以^符号后面的第一个字符开头
表示:以表示:以符号前面的第一个字符结尾
{n} 表示:重复n次
{n,m} 表示:重复n到m次
[xyz] 表示:其中任意一个字符
+ 表示:重复前一项1次或多次 等价于 {1,}
* 表示:重复前一项0次或多次 等价于 {0,}
? 表示:重复前一项0次或1次 等价于 {0,1}
. 表示:除了换行符以外的任意一个字符
\. 表示:.字符 ^ 表示:^ \表派搜示:表示:
可以用()将多个局竖字符作为一个整体
\w 等价于 [0-9a-zA-Z_]
| 表示:或者
[\u4E00-\u9FA5] 是常用汉字的unicode编码范围
三. 正则练习
四. 正则表达式配合字符串的方法
replace()方法
默认情况下,replace()方法,只会替换字符串中匹配的第一段内容
使用正则表达式,添加全局匹配修饰符g,可以替换匹配全部内容
使用正则表达式,添加忽略大小写修饰符i,在匹配内容时会忽略大小写
search()方法
可以通过正则表达式查找位置
五. 添加学生练习
!DOCTYPE html
html
head
meta charset="UTF-8"
meta http-equiv="X-UA-Compatible" content="IE=edge"
meta name="viewport" content="width=device-width, initial-scale=1.0"
title添加学生/title
style
.err{
color: red;
}
.ok{
color: green;
}
/style
/head
body
form
table
tr
td姓名:/td
td
input type="text" id="name"
span id="nameMsg"/span
/td
/tr
tr
td年龄:/td
td
input type="text" id="age"
span id="ageMsg"/span
/td
/tr
tr
td性别:/td
td
input checked name="sex" type="radio" value="0"男
input name="sex" type="radio" value="1"女
/td
/tr
tr
td爱好:/td
td
input name="hobby" type="checkbox" value="抽烟"抽烟
input name="hobby" type="checkbox" value="喝酒"喝酒
尘腊历 input name="hobby" type="checkbox" value="烫头"烫头
input name="hobby" type="checkbox" value="睡觉"睡觉
/td
/tr
tr
td年级:/td
td
select id="grade"
option value="0"请选择/option
option value="1"大一/option
option value="2"大二/option
option value="3"大三/option
option value="4"大四/option
/select
span id="gradeMsg"必须要选择一个年级/span
/td
/tr
tr
td邮箱:/td
td
input type="text" id="email"
span id="emailMsg"请输入正确的邮箱格式/span
/td
/tr
tr
td电话:/td
td
input type="text" id="phone"
span id="phoneMsg"请输入正确的电话格式/span
/td
/tr
tr
td生日:/td
td
input type="text" id="bornDate"
span id="bornDateMsg"请输入正确日期格式/span
/td
/tr
tr
td/td
td
button type="submit"提交/button
button type="reset"重置/button
/td
/tr
/table
/form
script
//获取姓名文本框
let name = document.querySelector('#name')
//获取年龄文本框
let age = document.querySelector('#age')
//表单的提交事件
document.querySelector('form').onsubmit = function(){
// 返回true提交表单,返回false不提交表单
if(checkName() checkAge()){
return true
}else{
return false
}
}
//姓名文本框失去焦点
name.onblur = checkName
//验证姓名
function checkName(){
//定义验证姓名的正则
let reg = /^[\u4E00-\u9FA5]{2,4}$/
// 调用验证方法
return checkInput("#nameMsg",name,reg,'姓名正确','姓名必须是2-4位汉字')
}
//年龄文本框失去焦点
age.onblur = checkAge
//验证年龄
function checkAge(){
//定义验证年龄的正则
let reg = /^\d{1,2}$|^1([0-1]\d)|20$/
// 调用验证方法
return checkInput("#ageMsg",age,reg,'年龄正确','年龄必须是0-120之间')
}
//验证方法,参数分别是:span元素Id,表单元素对象,正则规则,验证成功消息,验证失败消息
function checkInput(spanId,_this,reg,okMsg,errMsg){
// 获取消息span
let span = document.querySelector(spanId)
//获取信息
let val = _this.value
if(!reg.test(val)){
span.className="err"
span.innerHTML = errMsg
return false //验证失败返回false
}else{
span.className="ok"
span.innerHTML = okMsg
return true //验证成功返回true
}
}
/script
/body
/html
JavaScript-正则表达式练习
登陆页面 login.html
!doctype html
html lang="en"
head
meta charset="UTF-8"
titlelogin/title
link rel="stylesheet" href="all.css"
script src="validate.js"/script
script src="login.js"/script
/head
body
div class="x-stage"
form action="#" class="x-form"
div class="x-field"label for="e-username" class="x-label"用户名:/labelinput id="e-username" name = "username" type="text" class="x-input"//div
div class="x-field"label for="e-pwd" class="x-label"密码:/labelinput id="e-pwd" name="pwd" type="password" class="x-input"//div
input type="button" name="login" value="登陆"/
input type="button" name="regist" value="注册"/
/form
/div
/body
/html
注册页面 regist.html
!doctype html
html lang="en"
head
meta charset="UTF-8"
titleregist/title
link rel="stylesheet" href="all.css"
script src="validate.js"/script
script src="regist.js"/script
/head
body
div class="x-stage"
form action="#" class="x-form"
div class="x-field"森此font class="x-requirement"*/fontlabel 此指迅for="e-username" class="x-label"用户名:/labelinput id="e-username" name = "username" type="text" class="x-input"/div class="x-prompt"2-10位字符 数字和字母均可/div/div
div class="x-field"font class="x-requirement"*/fontlabel for="e-pwd" class="x-label"密码:/labelinput id="e-pwd" name="pwd" type="password" class="x-input"/div class="x-prompt"6-20位 可以是数字字母或下划线/div/div
div class="x-field"font class="x-requirement"*/fontlabel for="e-c-pwd" class="x-label"确认密码:/labelinput id="e-c-pwd" name="cPwd" type="password" class="x-input"/div class="x-prompt"/div/div
div class="x-field"font class="x-requirement"*/fontlabel for="e-mail" class="x-label"电子邮箱:/labelinput id="e-mail" name="mail" type="text" class="x-input"/div class="x-prompt"用逗升于验证和找回密码/div/div
div class="x-field"font class="x-requirement"*/fontlabel for="e-sex-man" class="x-label"性别:/labelinput id="e-sex-man" name="sex" type="radio" class="x-input"男/inputinput id="e-sex-woman" name="sex" type="radio" class="x-input"女/inputdiv class="x-prompt"/div/div
input type="button" name="regist" value="注册"/
/form
/div
/body
/html
登陆脚本 login.js
window.onload = function(){
var form = document.forms[0];
var lastWorkUrl = '';
form.regist.onclick = function(){
form.action = 'regist.html';
form.submit();
};
form.login.onclick = function(){
if(!validate.checkLogin(form.username.value,form.pwd.value))
return false;
form.action = lastWorkUrl;
form.submit();
};
}
注册脚本 regist.js
window.onload = function(){
var form = document.forms[0];
var lastWorkUrl = '';
form.regist.onclick = function(){
if( !validate.checkUserName(form.username.value)
|| !validate.checkPwd(form.pwd.value)
|| !validate.checkConfirmPwd(form.pwd.value,form.cPwd.value)
|| !validate.checkMail(form.mail.value))
return false;
form.action = lastWorkUrl;
form.submit();
};
}
验证脚本 validate.js
var validate = {
checkNull:function(value){
if(!value)
return alert('不能为空!'),false;
return true;
},
checkLogin:function(name,pwd){
if(!name || !pwd)
return alert('输入不正确!'),false;
return true;
},
checkUserName:function(value){
if(!this.checkNull(value))
return false;
if(!/^[A-Za-z0-9]{2,10}$/.test(value))
return alert('2-10位字符 数字字母均可!'),false;
return true;
},
checkPwd:function(value){
if(!this.checkNull(value))
return false;
if(!/^\w{6,20}$/.test(value))
return alert('6-20位 可以是数字字母或下划线!'),false;
return true;
},
checkConfirmPwd:function(pwd,cpwd){
if(pwd pwd == cpwd this.checkPwd(pwd) this.checkPwd(cpwd))
return true;
return alert('确认密码错误!'),false;
},
checkMail:function(value){
if(!this.checkNull(value))
return false;
if(!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value))
return alert('邮箱格式错误!'),false;
return true;
}
};
样式表 all.css
.x-stage{
width:400px;
margin:100px auto;
}
.x-form{
}
.x-field{
margin-bottom: 5px;
font-size: 12px;
}
.x-label{
font-weight: bold;
margin-right: 5px;
width: 60px;
display: inline-block;
vertical-align: middle;
}
.x-input{
outline:none;
vertical-align: middle;
}
.x-prompt{
color : red;
font-size: 12px;
margin: 5px 0 5px 70px;
}
.x-requirement{
color : red;
}
正则表达式小练习,求解
^a[a-z]*a$
^(a|\\)[a-z]*(a|\\)$
^[^0][0-9]*
[0-9]*[02468]$
(\d*(29)\d*)*
^(?!.*(bbb)).*[ab]+.*$(从别人信郑那copy的)
((aa)*(bb)*(ab)*(ba)*)*
明天考试。。。有点晚滑键颂
剩下的亮迅几个没想好
从零开始学Python爬虫(四):正则表达式
Regular Expression, 正则表达式, 种使 表达式的 式对字符串进 匹配的语法规则。
我们抓取到的 源代码本质上就是 个超 的字符串, 想从 提取内容。 正则再合适不过了。
正则的优点: 速度快, 效率 , 准确性 正则的缺点: 新 上 难度有点 。
不过只要掌握了正则编写的逻辑关系, 写出 个提取 内容的正则其实并不谈旦复杂
正则的语法: 使 元字符进 排列组合 来匹配字符串
在线测试正则表达式网址:
元字符: 具有固定含义的特冲旦殊符号 常 元字符:
量词: 控制前 的元字符出现的次数
贪婪匹配和惰性匹配
这两个要着重的说 下,因为我们写爬 的最多的就是这个惰性匹配。
先看案例
那么接下来的问题是, 正则我会写了, 怎么在python程序中使 正则呢?答案是re模块
re模块中我们只需要记住这么 个功能就 够我们使 了。散侍扰
下面一个案例,是练习用正则表达式提取豆瓣电影top250的数据并保存,一起来学一下吧。
关于正则表达式练习和正则表达式训练的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。