基础的正则表达式与re模块(2)
一、元字符
字符组是元字符中的一个。在字符组中所有的字符都可以匹配任意一个字符位置上能出现的内容,如果在字符串中有任意一个字符是字符组中的内容,那么就是匹配上的项。
[0-9] [a-z] [A-Z] ascii编码小的值,指向一个大的值
# \d表示匹配一个数字 [0-9]
元字符:
\w word匹配字母和数字、下划线 \d digit \s space \n next \t tab \W \D \S
^开始 $结尾 \b 匹配边界
[] [^] 字符组相关的
| 或
() 分组
. 匹配除了换行符之外的任意字符
二、量词
?0次或1次,+1次或多次 *0次或多次 {n}n次 {n,}n次或多次 {n,m}n次或m次
\d+整数
\d+\.\d+ 小数
\d+\.\d+|\d+ 整数或者小数 \d+(\.\d+)?
# 贪婪匹配 : 正则会尽量多的帮我们匹配
# 默认贪婪 回溯算法
# 非贪婪匹配 :会尽量少为我们匹配
# 量词?表示非贪婪 惰性匹配
# .*?x 表示匹配任意长度任意字符遇到一个x就立即停止
元字符注意事项: 元字符 量词
元字符 量词 ? 在量词的范围内尽量少的匹配这个元字符
分组 对某些固定的内容做量词约束
或 把长的放前面
转义符
pattern = r'\\n'
s = r'\n'
转义:使用 \或r转义
三、re模块
3.1 findall
import re
# findall
ret = re.findall('\d+','SGY93SHD2183Y0')
print(ret)
结果:
['', '', '']
参数 正则表达式 待匹配的字符串
返回值 是一个列表 所有匹配到的项
没有匹配到会返回一个空列表
如果遇到分组,findall会优先显示分组中的内容
(?:正则表达式)取消分组优先
3.2 search
import re
# search
ret = re.search('\d+','SGY93SHD2183Y0')
print(ret)
print(ret.group())
结果:
<_sre.SRE_Match object; span=(3, 5), match=''> # 对象
93
返回值 : 返回一个SRE_Match对象 ,没有匹配到会返回None,没有.group()方法。如果有分组,通过索引取各分组中的内容
通过group去取值
且只包含第一个匹配到的值
findall 有个特点,会优先显示分组中的内容。优先前面的
import re
ret = re.findall('(www)\.(baidu|oldboy)\.(com)','www.baidu.com')
print(ret) # [('www', 'baidu', 'com')]
search的特点:
import re
ret = re.search('(www)\.(baidu|oldboy)\.(com)', 'www.baidu.com')
print(ret.group(0)) # www.baidu.com
print(ret.group(1)) # www
print(ret.group(2)) # baidu
print(ret.group(3)) # com
match 验证用户输入的内容
ret = re.match('\d+','25ahs293djjk293sahf2938u')
print(ret) # <_sre.SRE_Match object; span=(0, 2), match='25'>
print(ret.group()) # 25
查看字符串开始位置的数字是多少,索引分别是多少。
分割split的用法
import re
s = 'alex8123egon1120boss_jin'
ret = re.split('\d+',s)
print(ret) # ['alex', 'egon', 'boss_jin'] ret = re.split('(\d+)',s) # (\d)+ \d\d\d\d\d...(\d)
print(ret) # ['alex', '8123', 'egon', '1120', 'boss_jin'] ret = re.split('\d(\d)',s)
print(ret) # ['alex', '1', '', '3', 'egon', '1', '', '0', 'boss_jin']
替换sub
s = 'alex|egon|boss|jin'
print(s.replace('|','')) # alexegonbossjin s1 = 'alex8123egon1120boss_jin626356'
ret = re.sub('\d+','|',s1)
print(ret) # alex|egon|boss_jin| ret = re.sub('\d+','|',s1,1)
print(ret)
#alex|egon1120boss_jin626356 替换一次 ret = re.subn('\d+','|',s1)
print(ret) # ('alex|egon|boss_jin|', 3) 元组,并显示次数
compile 编译正则规则
import re
com = re.compile('\d+') # 制定正则规则
ret = com.search('abc1cde2fgh3skhfk')
print(ret.group()) # ret = com.findall('abc1cde2fgh3skhfk')
print(ret) # ['1', '2', '3'] ret = com.finditer('abc1cde2fgh3skhfk')
for i in ret:
print(i.group()) # 1 2 3
finditer 节省空间的方法
ret = re.finditer('\d+','abc1cde2fgh3skhfk')
print(ret)
for i in ret:
print(i.group()) # 逐个取值
四、分组命名、分组约束
当我们需要取 <h1>函数</h1> \<a>函数</a> 中的内容时,需要用到分组命名:
pattern = '<(?P<tag>.*?)>.*?</(?P=tag)>'
ret = re.search(pattern,'<h1>函数</h1>')
print(ret) # <_sre.SRE_Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
print(ret.group()) # <h1>函数</h1>
print(ret.group(1)) # h1
print(ret.group('tag')) # h1
可以去除类似 <h1>函数</h1> 标签对
直接用\1也是可以的
pattern = r'<(.*?)>.*?</\1>'
ret = re.search(pattern,'<a>函数</a>')
print(ret) # <_sre.SRE_Match object; span=(0, 11), match='<h1>函数</h1>'>
if ret:
print(ret.group()) # <h1>函数</h1>
print(ret.group(1)) # h1
基础的正则表达式与re模块(2)的更多相关文章
- Python开发基础-Day14正则表达式和re模块
正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...
- python基础之正则表达式和re模块
正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...
- python基础之 正则表达式,re模块
1.正则表达式 正则表达式:是字符串的规则,只是检测字符串是否符合条件的规则而已 1.检测某一段字符串是否符合规则 2.将符合规则的匹配出来re模块:是用来操作正则表达式的 2.正则表达式组成 字符组 ...
- python基础之正则表达式 re模块
内容梗概: 1. 正则表达式 2. re模块的使⽤ 3. 一堆练习正则表达式是对字符串串操作的一种逻辑公式. 我们一般使用正则表达式对字符串进行匹配和过滤.使用正则的优缺点: 优点: 灵活,功能性强, ...
- Python与正则表达式[0] -> re 模块的正则表达式匹配
正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...
- python基础之正则表达式
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
- 黑马程序员:Java基础总结----正则表达式
黑马程序员:Java基础总结 正则表达式 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import java.util.regex.*; 符合一定规 ...
- Python之正则表达式(re模块)
本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...
- 【转】Python之正则表达式(re模块)
[转]Python之正则表达式(re模块) 本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示: ...
随机推荐
- JQ获取地址栏参数
//获取地址栏参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...
- leetcode 852. Peak Index in a Mountain Array
Input: [0,1,0] Output: 1 Input: [0,2,1,0] Output: 1解: 比较数组中的i和i-1的大小,如果前一位大于后一位数字,前一位则是结果 let ans = ...
- 关于W8.1不能安装VS2015(包括2017等)
电脑本来是W7 64位+OPENCV3.1,今天突然系统崩溃了,然后感觉W7过时了遇到很多问题直接系统崩溃还得了啊,干脆装了一个W8.1了. 好吧~~本来想直接说问题的,干脆先把装系统给记录一下--& ...
- vim more
启用鼠标 :set mouse=a 跳转到下一函数 下一个函数开头 ]] 当前函数末尾/下一个函数的末尾 ][ 当前函数开头/上一个函数的开头 [[ 选项可以按任何顺序生效,可以放在文件名前或后边 ...
- <转>如何用C++实现自动微分
作者:李瞬生转摘链接:https://www.zhihu.com/question/48356514/answer/123290631来源:知乎著作权归作者所有. 实现 AD 有两种方式,函数重载与代 ...
- Linux将某目录授权给某组里的某用户
chown -Rf 用户名:组名 目录
- secureCRT 设置字体时,显示字体较少问题
控制面板->字体->选择字体,右击"显示".就可以再crt中看到了.
- java 可重入锁ReentrantLock的介绍
一个小例子帮助理解(我们常用的synchronized也是可重入锁) 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝.由于井水有限,大家只能依次打水.为了实现家家有水喝,户 ...
- linux 如何统计某目录下所有文件个数
该目录以及该目录的子目录下普通文件个数: ls -lR |grep '^-' |wc -l ls -l 查询该目录下的所有文件 R 包含子目录,其实就是递归查看 grep '^-' 表示过滤掉(以&q ...
- djangobb之forum.topics
看djangobb源代码时,看到view的show_forum(request, forum_id, full=True)时,对于topics = forum.topics.order_by('-st ...