Python 正则表达式基础(详细)
正则表达式(Regular Expression)
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。它本身是一种小型的、高度专业化的编程语言,在python中,通过内嵌集成re模块,根据代码可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。
import re
python re库文件常用函数介绍:
# 通过以下命令查看简介
help(re.match)
help(re.search)
help(re.findall)
help(re.compile)
Help on function match in module re:match(pattern, string, flags=0)Try to apply the pattern at the start of the string, returninga match object, or None if no match was found.Help on function search in module re:search(pattern, string, flags=0)Scan through string looking for a match to the pattern, returninga match object, or None if no match was found.Help on function findall in module re:findall(pattern, string, flags=0)Return a list of all non-overlapping matches in the string.If one or more capturing groups are present in the pattern, returna list of groups; this will be a list of tuples if the patternhas more than one group.Empty matches are included in the result.Help on function compile in module re:compile(pattern, flags=0)Compile a regular expression pattern, returning a pattern object.
re.match函数作用:
尝试从字符串的开头开始匹配一个模式,如果匹配成功,返回一个匹配成功的对象,否则返回None。
re.match函数参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式。如是否区分大小写、是否多行匹配等。
re.search函数作用:
扫描整个字符串并返回第一次成功的匹配对象,如果匹配失败,则返回None。
re.search函数参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式。如是否区分大小写、是否多行匹配等。
re.findall函数的作用:
获取整个字符串中所有匹配的字符串,并以列表的形式返回。列表中的元素有如下几种情况:
当正则表达式中含有多个圆括号()时,列表的元素为多个字符串组成的元组,而且元组中字符串个数与括号对数相同,并且字符串排放顺序跟括号出现的顺序一致,当正则表达式中没有圆括号时,列表中的字符串表示整个正则表达式匹配的内容。
这里的()主要是提取相关字符的作用,返回的值为列表形式。
re.findall函数参数说明:
pattern:匹配的正则表达式
string:被分割的字符串
flags:标志位,用于控制正则表达式的匹配方式。如是否区分大小写、是否多行匹配等。
re.compile函数的作用:
返回的是一个匹配对象,单独使用就无任何意义,需要和findall(), search(), match()搭配使用。
使用方式:
import re
text = 'abcde12345edcba'
regex = re.compile(r'([a-z]*)([0-9]*)([a-z]*)')
result = regex.search(text)
print(result.group(3)) # 返回第三个匹配内容
输出结果:
edcba
match.group([参数1],[参数2],…)
括号表达式用于定义一个group,一个正则表达式中可以有多个括号表达式,这就意味着匹配结果中可能有多个group,通过group函数来返回特定位置的group结果。
参数说明:
返回匹配结果中一个或多个group.如果该group函数仅仅有一个参数,那么返回结果就是单个字符串
如果有多个参数,结果是每一个参数对应的group项的元组.如果没有参数,那么group参数默认为0,也就是返回整个匹配结果的字符串
import re
text = r'abcde12345edcba'
regex = '([a-z]*)([0-9]*)([a-z]*)'
print(re.search(regex,text).group(0)) # 返回整个匹配结果,这里为全部元素
print(re.search(regex,text).group(1)) # 返回第一个匹配元素
print(re.search(regex,text).group(2)) # 返回第二个匹配元素
print(re.search(regex,text).group(3)) # 返回第三个匹配元素
print(re.search(regex,text).group(1,3)) # 返回第一个匹配元素和第三个匹配元素
输出结果:
abcde12345edcba
abcde
12345
edcba
('abcde12345edcba', 'edcba')
元字符
Special characters
. 匹配任意除去换行字符'\n'的字母
\ 转义字符
test1 = '1\\2\\3abc' # 这里用了转义字符
test1_result = re.findall('(1...3)',test1)
print(test1_result)
输出结果:
<_sre.SRE_Match object; span=(0, 5), match='1\\2\\3'>
注意:这里结果还仍然保存'\\'符号,但是它们将作为一个'\'字符
^ 匹配字符串的开头
$ 匹配字符串的结尾
注:这里的字符串可以是一整空行,这时的字符串的开头和结尾位置相同
test2 = 'Hello World'
test2_result1 = re.findall('^Hello',test2)
test2_result2 = re.findall('World$',test2)
print(test2_result1)
print(test2_result2)
输出结果:
['Hello']
['World']
[1a-e] 匹配1或者a-e,即1,a,b,c,d,e字符
[^2f-j] 匹配所有不为2且f-j,即2,f,g,h,i,j字符
test3 = '1234567890abcdefghij'
test3_result1 = re.findall('[1a-d]',test3)
test3_result2 = re.findall('[^2f-j]',test3)
print(test3_result1)
print(test3_result2)
输出结果:
['1', 'a', 'b', 'c', 'd']
['1', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e']
R|S 匹配正则表达式R或者正则表达式S
() 创建捕获组并指示优先级
test4 = '1234567890 abcde fghij hello world'
test4_result1 = re.findall('[a-e][a-e][a-e][a-e]e|[a-z]e[a-z][a-z][a-z]',test4)
test4_result2 = re.findall('([a-e][a-e][a-e][a-e]e)|([a-z]e[a-z][a-z][a-z])',test4)
print(test4_result1)
print(test4_result2)
结果显示:
['abcde', 'hello']
[('abcde', ''), ('', 'hello')]
这里返回包含元组的列表
Quantifiers
* 0或更大(附加'?'为非贪婪形式,默认为贪婪)
+ 1个或更多(附加'?'为非贪婪形式,默认为贪婪)
? 0或1
test5 = '1111100000 aaaaaaabbbbb ccccc'
test5_result1 = re.findall('a*',test5)
test5_result2 = re.findall('a+',test5)
test5_result3 = re.findall('a*?',test5)
test5_result4 = re.findall('a+?',test5)
print(test5_result1)
print(test5_result2)
print(test5_result3)
print(test5_result4)
结果显示:
['', '', '', '', '', '', '', '', '', '', '', 'aaaaaaa', '', '', '', '', '', '', '', '', '', '', '', '']
['aaaaaaa']
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
['a', 'a', 'a', 'a', 'a', 'a', 'a']
{m} 匹配前面的字符重复m次
{m, n} 匹配前面的字符重复m到n遍,m默认为0,n为无穷大
{m, n}? 匹配前面的字符重复m到n遍,采用非贪婪
test6 = '1111100000 aaaaaaabbbbbb ccccc'
test6_result1 = re.findall('b{3}',test6)
test6_result2 = re.findall('b{3,5}',test6)
test6_result3 = re.findall('b{4,6}?',test6)
print(test6_result1)
print(test6_result2)
print(test6_result3)
结果显示:
['bbb', 'bbb']
['bbbbb']
['bbbb']
Special sequences
\A 字符串开始
\b 匹配位于开头或者结尾的空字符串
\B 匹配不在单词边界处的空字符串
\d 匹配任意十进制数字
\D 匹配非数字
\s 匹配空白: [\t\n\r\f\v]
\S 匹配非空白
\w 匹配字母数字: [0-9a-zA-Z]
\W 匹配非字母数字
test6 = '10101abcabc %1%%%0% 101010#abc10#10 abc101010abc '
test6_result1 = re.findall('\d+',test6)
test6_result2 = re.findall('\D+',test6)
test6_result3 = re.findall('\w+',test6)
test6_result4 = re.findall('\W+',test6)
test6_result5 = re.findall('\s%1%%',test6)
print(test6_result1)
print(test6_result2)
print(test6_result3)
print(test6_result4)
print(test6_result5)
结果显示:
['10101', '1', '0', '101010', '10', '10', '101010']
['abcabc %', '%%%', '% ', '#abc', '#', ' abc', 'abc ']
['10101abcabc', '1', '0', '101010', 'abc10', '10', 'abc101010abc']
[' %', '%%%', '% ', '#', '#', ' ', ' ']
[' %1%%']
推荐两个regex学习网址:
regex101
pythonex
Python 正则表达式基础(详细)相关推荐
- python正则匹配找到所有的浮点数_Python随笔17:Python正则表达式基础(4):贪婪匹配和最小匹配...
Python正则表达式 贪婪匹配/最小匹配 Re库默认采用贪婪匹配,即匹配最长的子字符串.在量词后面加一个"?",即可由贪婪匹配化为最小匹配. '*'用于将前面的模式匹配0次或多次 ...
- python 正则表达式基础
又一段时间没写博客了 最近一段时间在写pygame 又忽略了博客 今天因要帮朋友修改电影字幕 用到了正则表达式 重新学了一遍 发现还是得多练 才能算渐渐掌握 python 正则表达式 1.1介绍 正则 ...
- python正则表达式基础学习(一)
学习目标: 1.熟练使用正则表达式符号 2.正确组合和理解一般的正则表达式 3.能够使用python操作正则表达式 学习内容: 1.正则表达式 1.处理文本成为计算机常见工作之一 2.对文本内容的搜索 ...
- Python 正则表达式-基础操作
search()方法:只要有匹配的后面就不会继续进行检索,找到一个匹配就会停止. msg = 'abcd7vikfd8hdfoo'result = re.search('[a-z][0-9][a-z] ...
- python语言基础-详细的总结一下python入门基础语言知识!
1,定义变量,使用变量 ps:码字不易,喜欢的小伙伴希望关注下小编哦! input 用户自己输入值 print 打印值 可以输出多个变量 %d|%s 用于输出变量时占位 2,字符串(后期爬虫必备) i ...
- python+PyQt5基础详细教程
from PyQt5.QtWidgets import QApplication, QWidget import sysif __name__ == '__main__':app = QApplica ...
- python 正则表达式取反,python正则取反_Python正则表达式-基础
Python正则表达式-基础 python使用正则,需要先引入re模块 import re 匹配符 单个字符表达式 含义 [0-9] 0123456789任意之一 [a-z] 小写字母任意之一 [A- ...
- 初识Python正则表达式(9课连发)
本文由屋友彭东成投稿. ======================= 第一课 首先跟大家简单唠叨两句为什么要学习正则表达式,为什么在网络爬虫的时候离不开正则表达式.正则表达式在处理字符串的时候扮演着 ...
- 了解python正则表达式
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块来操作,名字为re import re (1)三种基本方法 在re模块中,通常使用三种方法:match.searc ...
最新文章
- 2021 边缘计算预测
- redis 集群 及 管理初步
- ubuntu python3.5安装_ubuntu16.04升级Python3.5到Python3.7的方法步骤
- 《互联网运营智慧》十一月进展
- 查看Mat对象的数据的三种方法
- PHP的empty isset is_null
- IntelliJ IDEA 17和Maven构建javaWeb项目
- 个人或结对项目 - 动态显示程序运算的过程
- 算法的力量万变不离其宗 -- 李开复
- 计算机系统-电路设计01-非门电路
- 这世上有个词叫Crush,有多少人误把它当做Love
- elasticsearch 分组求和
- python画猫咪老师_夏目友人帐 | 绘画小白怎样用水彩画一只圆滚滚的猫咪老师?...
- 台式计算机无线网络,台式电脑怎么设置无线网络?
- SAP 标准成本、计划成本、目标成本、实际成本计算公式
- 代号夏娃在电脑上怎么玩 代号夏娃PC版玩法教程
- lotus中密送,抄送,正常发送的区别
- 车间制造管理系统(下)
- 川大667真题 | 2018年信息管理基础真题(名词解释+简答题)
- PHP strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。
热门文章
- Eclipse如何设置代码自动提示
- KVM Linux 升级最新内核,安装 BBR
- 解决位图失真-SetStretchBltMode
- 传统贷款中介:如何在互联网+金融创新中突围
- 66道史上最全Redis面试题,面试官能问的都被我找到了(附答案)
- 文件扫描件怎么弄?分享三个实用的方法
- 手把手教程用Java实现微信公众号扫码登录功能
- Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]
- The Codeless Code: Case 16-17 Documentation(文件)、Not Invented By me(不是自己开发的东西)
- 【隐患排查系统】第一个项目总结