首页 > 其他分享 >正则表达式

正则表达式

时间:2022-10-25 19:45:24浏览次数:49  
标签:匹配 正则表达式 res re 字符串 group

正则表达式

描述

正则表达式是一门独立的技术,所有的语言都可以使用
它是利用一些特殊符号的组合或者直接写需要查找的字符来产生一些特殊的含义然后去给定的字符串中筛选出符合条件的数据
也就是说正则表达式主要就是用于筛选数据(匹配数据)

字符组

'''字符组的默认匹配方式就是挨个匹配'''
[0123456789]    匹配0到9之间的任意一个数(全写)
[0-9]    匹配0到9之间的任意一个数(缩写)
[a-z]    匹配26个小写的英文字母
[A-Z]    匹配26个大写的英文字母
[0-9a-zA-Z]    匹配数字或小写字母或大写字母

特殊符号

'''特殊符号的默认匹配方式也是挨个匹配'''
.           匹配除换行符以外的任意字符(除换行以外,其他任意字符都可以匹配)
\w(小写)    匹配数字、字母、下划线
\W(大写)    匹配非数字、非字母、非下划线
\d          匹配数字
^           匹配字符串的开头
$           匹配字符串的结尾
# ^和$组合使用可以非常精确的限制匹配的内容
a|b         匹配a或者b
()          给正则表达式分组,不影响表达式的匹配功能
[]          字符组,里面填写的内容默认都是或的关系
[^]         取反,匹配除了字符组里面的其它所有字符

量词

'''正则表达式中默认都是贪婪匹配的,即尽可能多的匹配'''
*           匹配零次或多次  默认就是多次
+           匹配一次或多次  默认就是多次
?           匹配零次或一次  默认是一次,作用不大,主要用于非贪婪匹配
{n}         重复n次
{n,}        重复n次或更多次  默认是多次
{n,m}       重复n到m次  默认是m次
# 量词必须结合表达式一起用不能单独出现,而且量词只影响它左边第一个表达式

贪婪匹配与非贪婪匹配

'''所有的量词都是贪婪匹配,非贪婪匹配只需要在量词的后面问号就可以了'''
eg:
    带匹配的文本
        <hello>hello<hello>
    待使用的正则(贪婪匹配)
        <.*>
    	匹配结果
        	<hello>hello<hello>
    非贪婪匹配
        <.*?>
        匹配结果
        <hello>  <hello>

转义符

'''斜杠与字母的组合有时候有特殊含义'''
\n       匹配的是换行符
\\n      匹配的是文本\n
\\\n     匹配的是换行符
\\\\n    匹配的是文本\\n
在python中可以使用字符串前面加r取消转义

ps: 很多时候我们都不需要自己去写正则表达式,网络上有很多,只需要能够写出简单的正则表达式,能够看懂复杂的正则表达式就行了

re模块

在python中如果想用正则可以考虑使用re模块
import re

操作方法
1.re.findall(正则表达式, 待查找的字符串)
    查找所有符合正则表达式要求的数据,其结果是一个列表
2.re.finditer(正则表达式, 待查找的字符串)
    查找所有符合正则表达式要求的数据,结果是一个迭代器对象
3.re.search(正则表达式, 待查找的字符串)
    匹配到一个符合条件的数据就结束
    查看结果需要用.group()
4.re.match(正则表达式, 待查找的字符串)
    根据正则表达式匹配字符串的开头,如果开头不符合后面就不用看了
    查看结果需要用.group()
5.obj = re.compile(正则表达式)
    当某一个正则表达式需要频繁使用的时候,可以做成模板
    后面使用时直接用模板调re模块方法
    obj.findall(字符串)
6.re.split()  对字符串做分割
    re.split('[ab]', 'abcd') 
    # 先按'a'分割得到''和'bcd',再对''和bcd'分别按'b'分割
7.re.sub('\d', 'H', 'eva3jason4yuan4', 1)
    # 将字符串中的数字替换为'H',1表示只替换1个
8.re.subn('\d', 'H', 'eva3jason4yuan4') 
    将字符串中数字替换成'H',返回元祖(替换的结果,替换了多少次)

re模块补充

1.分组优先
res = re.findall('123(321|456)789', '123456789')
print(res)  # ['456']
findall分组优先展示:优先展示括号内正则表达式匹配到的内容

如果想取消优先展示需要在括号内开头加问号和冒号
res = re.findall('123(?:321|456)789', '123456789')
print(res)  # [123456789]
# 分组优先展示只对find类方法起作用

2.分组别名
res = re.search('123(?P<count>321|456)(?P<end>789)', '123456789')
print(res.group())  # 123456789
print(res.group('count'))  # 456
print(res.group(0))  # 123456789
print(res.group(1))  # 456
print(res.group(2))  # 789
print(res.group('end'))  # 789

标签:匹配,正则表达式,res,re,字符串,group
From: https://www.cnblogs.com/zyg111/p/16826043.html

相关文章

  • re模块和正则表达式
    内置模块之re模块re模块可以配合正则表达式使用。在很多网页中,要求输入手机号、邮箱等,会在我们还没输完的情况下就提示我们在“请输入正确的手机号”“邮箱格式不正确”......
  • 正则表达式
    内容概要购物车程序设计正则表达式字符组量词贪婪匹配与非贪婪匹配转义符正则表达式实战re模块简易爬虫题目购物车程序设计1.项目框架搭建空函数功能字典......
  • 正则表达式
    概念正则表达式可以用来匹配字符串,可以实现字符串的截取或者按规则替换和验证字符串的内容在js中创建正则表达式对象varreg=newRegExp("123");varreg=/123/;//......
  • 牛客BM76(正则表达式匹配)
    BM76正则表达式匹配具体实现:1.确定dp数组以及下标的含义dp[i][j]代表s中以i结尾的子串和p中j为结尾的子串是否匹配2.状态转移(1)p[j]为普通字符:匹配的条件是前面的字符......
  • 正则表达式
    一、正则表达式    是用来描述字符串内容格式,使用它通常用于匹配一个字符串的内容是否符合格式要求。1.[]:表示一个字符,该字符可以是[]中指定的内容例如:[a......
  • JavaScript学习--正则表达式
       /[^0-9]/g表示除了0-9其他所有的更多在https://www.runoob.com/regexp/regexp-tutorial.html ......
  • 正则表达式
    正则表达式(regularexpression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。构......
  • Python正则表达式(Python RegEx)
    Python正则表达式目录Python正则表达式快速参考函数详解match()search()捕获和分组Match对象sub()compile()findall()finditer()split()参考博客与示例代码快速参考常用......
  • 【正则】578- 1小时真正掌握正则表达式
    1.基本匹配正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成.例如:一个正则表达式 ​​the​​​,它表示一个规则:由字母​​t​​​开始,接着是​......
  • day16 正则表达式 & 反射 & Java内存模型(JMM)
    day16class1)获取一个类的所有信息(变量、方法、构造方法)2)创建类对象newInstance()Field1)访问变量或给变量赋值Method1)执行具体类对象的指定方法3.Method(获取方法对......