正则表达式(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 正则表达式基础(详细)相关推荐

  1. python正则匹配找到所有的浮点数_Python随笔17:Python正则表达式基础(4):贪婪匹配和最小匹配...

    Python正则表达式 贪婪匹配/最小匹配 Re库默认采用贪婪匹配,即匹配最长的子字符串.在量词后面加一个"?",即可由贪婪匹配化为最小匹配. '*'用于将前面的模式匹配0次或多次 ...

  2. python 正则表达式基础

    又一段时间没写博客了 最近一段时间在写pygame 又忽略了博客 今天因要帮朋友修改电影字幕 用到了正则表达式 重新学了一遍 发现还是得多练 才能算渐渐掌握 python 正则表达式 1.1介绍 正则 ...

  3. python正则表达式基础学习(一)

    学习目标: 1.熟练使用正则表达式符号 2.正确组合和理解一般的正则表达式 3.能够使用python操作正则表达式 学习内容: 1.正则表达式 1.处理文本成为计算机常见工作之一 2.对文本内容的搜索 ...

  4. Python 正则表达式-基础操作

    search()方法:只要有匹配的后面就不会继续进行检索,找到一个匹配就会停止. msg = 'abcd7vikfd8hdfoo'result = re.search('[a-z][0-9][a-z] ...

  5. python语言基础-详细的总结一下python入门基础语言知识!

    1,定义变量,使用变量 ps:码字不易,喜欢的小伙伴希望关注下小编哦! input 用户自己输入值 print 打印值 可以输出多个变量 %d|%s 用于输出变量时占位 2,字符串(后期爬虫必备) i ...

  6. python+PyQt5基础详细教程

    from PyQt5.QtWidgets import QApplication, QWidget import sysif __name__ == '__main__':app = QApplica ...

  7. python 正则表达式取反,python正则取反_Python正则表达式-基础

    Python正则表达式-基础 python使用正则,需要先引入re模块 import re 匹配符 单个字符表达式 含义 [0-9] 0123456789任意之一 [a-z] 小写字母任意之一 [A- ...

  8. 初识Python正则表达式(9课连发)

    本文由屋友彭东成投稿. ======================= 第一课 首先跟大家简单唠叨两句为什么要学习正则表达式,为什么在网络爬虫的时候离不开正则表达式.正则表达式在处理字符串的时候扮演着 ...

  9. 了解python正则表达式

    ​​​​​​在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块来操作,名字为re import re (1)三种基本方法 在re模块中,通常使用三种方法:match.searc ...

最新文章

  1. 2021 边缘计算预测
  2. redis 集群 及 管理初步
  3. ubuntu python3.5安装_ubuntu16.04升级Python3.5到Python3.7的方法步骤
  4. 《互联网运营智慧》十一月进展
  5. 查看Mat对象的数据的三种方法
  6. PHP的empty isset is_null
  7. IntelliJ IDEA 17和Maven构建javaWeb项目
  8. 个人或结对项目 - 动态显示程序运算的过程
  9. 算法的力量万变不离其宗 -- 李开复
  10. 计算机系统-电路设计01-非门电路
  11. 这世上有个词叫Crush,有多少人误把它当做Love
  12. elasticsearch 分组求和
  13. python画猫咪老师_夏目友人帐 | 绘画小白怎样用水彩画一只圆滚滚的猫咪老师?...
  14. 台式计算机无线网络,台式电脑怎么设置无线网络?
  15. SAP 标准成本、计划成本、目标成本、实际成本计算公式
  16. 代号夏娃在电脑上怎么玩 代号夏娃PC版玩法教程
  17. lotus中密送,抄送,正常发送的区别
  18. 车间制造管理系统(下)
  19. 川大667真题 | 2018年信息管理基础真题(名词解释+简答题)
  20. PHP strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。

热门文章

  1. Eclipse如何设置代码自动提示
  2. KVM Linux 升级最新内核,安装 BBR
  3. 解决位图失真-SetStretchBltMode
  4. 传统贷款中介:如何在互联网+金融创新中突围
  5. 66道史上最全Redis面试题,面试官能问的都被我找到了(附答案)
  6. 文件扫描件怎么弄?分享三个实用的方法
  7. 手把手教程用Java实现微信公众号扫码登录功能
  8. Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]
  9. The Codeless Code: Case 16-17 Documentation(文件)、Not Invented By me(不是自己开发的东西)
  10. 【隐患排查系统】第一个项目总结