本文目录:
- 1、正则表达式名词解释
- 2、什么是正则表达式
- 3、正则表达式(Regular Expressions)
- 4、正则表达式
正则表达式名词解释
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
什么是正则表达式
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
简介
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
正则表达式(Regular Expressions)
正则表达式(Regular expressions) 有两个用处:
在Python中通过re模块引用正则表达式。
当你定义了一个正则表达式,可以用re.match功能辨别字符是否匹配。
为了避免字符上的混淆,我们可以用 r"expression" 来表示字符串。
例如:
另外一个匹配功能是 re.search 和 re.findall.
re.search 在一组字符串的 任意位置 找到匹配项。
re.findall 将 所有 匹配字符返回到 一个列表 。
例如:
结果:
正则搜索有以下几种methods:
例如:
结果:
另外在re模块中还有个特别重要的正则式:sub。
语法规则:
re.sub(pattern, repl, string, max=0)
这个方法将在string处查找pattern中的字符,然后替换为repl的字符,最后返回修改后的语句。
例如:
结果:
元字符使得正则表达式比一般字符方法更加强大。
第一个元字符是 .(原点) 。
他的作用是匹配任何一个单字字符(除了换行符号)。
例如:
接下来两个元字符是 ^ 和 $ ,作用分别是匹配一个字符的 开始 和 结束 。
例如:
字符类提供了一个匹配一组特定字符中唯一字符的方法。
用中括号来创建一组字符类。
例如
字符类也能匹配字符域,比如:
[a-z]匹配所有小写字符。
[G-P]匹配所有大写字符。
[0-9]匹配所有数字。
多个域可以合到一个类里。比如[A-Za-z]可以匹配26个字母中任意一个。
^放置于字符类的开头,用于反置,即匹配除字符类之外的字符。
更多的元字符包括:
***** 表示0或更多次重复。
例如:
+ 类似于*,表示1或更多次重复。
例如:
? 表示重复1或0次。
例如:
正则表达式
main role="main" class="cha-23fb-d2b9-4e51-6db0 App-main"
首发于 Python办公自动化
无障碍 写文章
登录
article class="cha-d2b9-4e51-6db0-a2d8 Post-Main Post-NormalMain" tabindex="-1"
header class="cha-4e51-6db0-a2d8-fe02 Post-Header"
第一小乔乔
进一步,是一步。一起工作进步,厨艺精进,生活美满。
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="cha-85fb-b914-fb27-68a2 UploadPicture-wrapper" /label
发布
/main
label class="cha-b914-fb27-68a2-0faf Editable-languageSuggestionsInput Input-wrapper" 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="cha-fb27-68a2-0faf-dfab Input" placeholder="选择语言" value="" /label
【正则表达式】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: