python正则表达式匹配字符串相关方法
python正则表达式匹配字符串相关方法
- 一、匹配方法简要介绍及注意事项
- 1.贪婪匹配与非贪婪匹配
- 2.findall与search的选取问题
- 3.匹配时"()"和“[]”的用法
- 4.使用正则表达式匹配字符串的例子
- 二、相关函数简要介绍
- re.compile函数
- re.match函数
- re.search函数
- findall函数
- re.finditer函数
- re.sub函数
- 其他函数
一、匹配方法简要介绍及注意事项
1.贪婪匹配与非贪婪匹配
在定义用于匹配的模式串时,我们知道“.*”和“.*?”分别代表“匹配任意字符0次或多次”和“匹配任意字符0次或1次”。如果使用“.*”,则为贪婪匹配;如果使用“.*?”,则为非贪婪匹配。
# 以abcdbcd为例
str_demo = 'abcdbcd'
result = re.search('b.*d', str_demo).group()
print(result)
## 输出bcdbcd
result = re.search('b.*?d', str_demo).group()
print(result)
## 输出bcd
2.findall与search的选取问题
如果认为自己定义的模式串只能匹配到一个结果,则使用search方法结合group方法可以直接得到这个字符串;如果认为自己定义的模式串能匹配到多个结果,则使用findall方法可以得到存储多个结果字符串的列表。
# 以abcdbcd为例
str_demo = 'abcdbcd'
result = re.search('b.*d', str_demo).group()
print(result)
## 输出bcdbcd
result = re.findall('b.*?d', str_demo)
print(result)
## 输出['bcd', 'bcd']
3.匹配时"()"和“[]”的用法
目标字符串:‘abcde’
1.[…] 会匹配在[]内的任意一个字符,而不会匹配整个字符串。
str_demo = 'eabceaebece'
result = re.findall('[abc]', str_demo)
print(result)
## 结果为['a', 'b', 'c', 'a', 'b', 'c']
result = re.findall('[abc][e]', str_demo)
print(result)
## 结果为['ce', 'ae', 'be', 'ce']
result = re.findall('[abc].*?[e]', str_demo)
print(result)
## 结果为['abce', 'ae', 'be', 'ce']
result = re.findall('[abc].*[e]', str_demo)
print(result)
## 结果为['abceaebece']
2.(…)会匹配在()内的整个字符串。使用search方法时则正常匹配(相当于没有()),使用findall方法时则只会匹配(…)的内容。
str_demo = 'eabcdeeaebece'
result = re.search('(abc).*?(e)', str_demo).group()
print(result)
## 结果为abcde
result = re.search('(abc).*(e)', str_demo).group()
print(result)
## 结果为abcdeeaebece
result = re.findall('(bc).*(e)', str_demo)
print(result)
## 结果为[('bc', 'e')]
3.()[]同时出现,考虑(…)式的字符串与[…]式内的字符和顺序,使用findall 方法时结果会舍弃[…]内容,使用search方法时则正常匹配(相当于没有()和[])。
str_demo = 'eabcdeeaebece'
result = re.findall('(e)[abc]', str_demo)
print(result)
## 结果为['e', 'e', 'e', 'e']
result = re.findall('(abc)[e]', str_demo)
print(result)
## 结果为[]
result = re.findall('(abc).*[e]', str_demo)
print(result)
## 结果为['abc']
result = re.findall('[abc].*(e)', str_demo)
print(result)
## 结果为['e']
result = re.search('[bc].*(e)', str_demo).group()
print(result)
## 结果为## 结果为bcdeeaebece
result = re.search('[bc].*?(e)', str_demo).group()
print(result)
## 结果为## 结果为bcde
4.使用正则表达式匹配字符串的例子
下列例子均使用非贪婪匹配方法。
(1)匹配以a开头,以b为结尾的字符串(不包含开头和结尾):
str_demo = 'acdbcd'
pattern = re.compile('(?<=a).*?(?=b)')
result = pattern.search(str_demo).group()
print(result)
## 输出cd
(2)匹配以a开头,以b结尾的字符串(包含开头和结尾):
str_demo = 'acdbcd'
pattern = re.compile('a.*?b')
result = pattern.search(str_demo).group()
print(result)
## 输出acdb
(3)匹配前面不为a、后面不为b的字串:
str_demo = 'a1***3***3b'
pattern = re.compile('(?!<a)1.*3(?!b)')
result = pattern.search(str_demo).group()
print(result)
## 输出1***3
二、相关函数简要介绍
re.compile函数
re.compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 、 search() 和 findall() 这三个函数使用。
re.compile(pattern[, flags])
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式。 |
flags | 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 |
re.match函数
re.match 尝试从目标字符串的起始位置匹配,如果起始位置匹配不成功,则match()就返回none。
re.match(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式。 |
string | 要匹配的字符串。 |
flags | 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 |
re.search函数
re.search 扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式。 |
string | 要匹配的字符串。 |
flags | 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 |
findall函数
findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
findall(string[, pos[, endpos]])
pattern.findall(string[, pos[, endpos]]) # pattern及定义好的正则匹配式,如re.compile
re.findall(pattern,string[, pos[, endpos]])
参数 | 描述 |
---|---|
string | 要匹配的字符串。 |
pos | 可选参数,指定字符串的起始位置,默认为 0。 |
endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |
re.finditer函数
re.finditer 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式。 |
string | 要匹配的字符串。 |
flags | 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 |
re.sub函数
re.sub 用于替换字符串中的匹配项。
re.sub(pattern, repl, string, count=0, flags=0)
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
repl | 替换用的字符串,也可为一个函数。 |
string | 要匹配的字符串。 |
count | 可选参数,匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags | 可选参数,标志位,控制匹配方式,如:是否区分大小写,多行匹配等等。 |
其他函数
菜鸟教程链接: python正则表达式
正则表达式特殊符号用法链接:特殊符号
其他教程:详情
python正则表达式匹配字符串相关方法相关推荐
- python正则表达式匹配字符串中的电话号码_Python正则表达式匹配字符串中的数字...
这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 代码: ...
- Python正则表达式匹配字符串中的数字
导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...
- python正则表达式匹配字符串
关注微信公众号(瓠悠笑软件部落),一起学习,一起摸鱼 相关资料: re module regular-expressions 使用步骤 import re 导入正则表达式模块 用 re.compile ...
- python | 正则表达式匹配字符串中的符号
有的时候需要匹配字符串里的一些特定符号,比如匹配字符串中有没有感叹号.问好来评价原文的情感倾向 整理了以下各个标点符号的表达式: 符号 表达式 . \u3002 : \uff1b , \uff0c : ...
- python正则匹配字符串中的数字_Python正则表达式匹配字符串中的数字
1.使用"\d+"匹配全数字 代码: import re zen = "Arizona 479, 501, 870. Carlifornia 209, 213, 650. ...
- python正则匹配11个数字_Python正则表达式匹配字符串中的数字
导读 这篇文章主要介绍了Python正则表达式匹配字符串中的数字,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.使用"\d+"匹配全数字 ...
- python怎么匹配字符串_python正则表达式如何匹配字符串
python正则表达式匹配字符串的方法:1.使用[(.+?)]这个正则表达式来提取单个位置的字符串:2.使用[(?P-)]这个正则表达式[匹配连续多个位置的字符串. python正则表达式匹配字符串的 ...
- 转载Python正则表达式匹配反斜杠'\'问题(——字符串转义与正则转义)
个人总结(非转载部分): 1.原始字串(字符串前加r,如r'xxx')常用在正则表达式中,在正则表达运算中,要进行正则转义(原始字串不原始) 实例: 2.普通字串若要用于正则表达式中,会先进行&quo ...
- python匹配数字开头的内容_python使用正则表达式匹配字符串开头并打印示例
python 正则表达式,怎样匹配以某个字符串开头,以str ="abcdefg123213qwe" 比如要匹配以abc开头,以qwe结尾,要怎样写呢?匹配以某个字符串开头,以某个 ...
最新文章
- 前端开发周边(js版页内锚点跳转方法)
- Python 学习笔记(2)创建文件夹
- 【学习心得】当程序员思路被打断
- kubernetes Authorization
- 高斯拟合原理_AlexNet原理和实现
- iPhone开发中的一些小技巧
- 【CentOS 7笔记46】,crondtab任务计划和chkconfig系统服务管理#
- LeetCode OJ - Sort List
- 360数科第三季度财报:输出积木式技术样板,科技业务占比提升至28%
- [leetcode]476. 数字的补数
- 面试官:有了 for 循环,为什么还要 forEach ??
- 网页制作初期,必须的东西
- UWB超宽带定位技术
- RS485串口模块详解RS232、RS485、RS485
- “记忆宫殿”等五大方法,拯救你衰退中的记忆力
- 学习笔记——STM32摄像头OV7725(一)
- WordPress XMLRPC安全漏洞
- 图像算法工程师需要这样
- Android渐变遮罩
- 国赛丨2020年计算机检测维修与数据恢复比赛助手资料包
热门文章
- 网站关键词优化--细说长尾6关键词的特征
- 报错:fatal: remote origin already exists.
- 龙卷风路径_龙卷风路径图片壁纸 60 Tornado Alley - 猫猫壁纸酷 wallcoo.com
- pyautogui使用初体验
- Java面试题,Java,面试题,线程池
- mq的基本介绍和基本用法
- Lake Shore低温温度传感器综合介绍
- 三星I9100有时不能收发彩信完美解决!中国移动
- 2015蓝桥杯python——饮料换购
- 人工智能学习07--pytorch11--分类网络:使用pytorch和tensorflow计算分类模型的混淆矩阵