广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 正则表达式
  • 670
分享到

python 正则表达式

正则表达式python 2023-01-30 23:01:13 670人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2

正则表达式的作用:用来匹配字符串

一、字符串方法

字符串提供的方法是完全匹配,不能进行模糊匹配
s = 'hello world'

# 字符串提供的方法是完全匹配,不能进行模糊匹配
print(s.find('ll'))  # 2   查找ll的位置,输出的是第一个l的位置   
ret = s.replace('ll', 'xx')   # 替换,用ll 替换为 xx
print(ret)   # hexxo world   
print(s.split('w'))   # ['hello ', 'orld']   分割:以w为界限,分割为前后两部分,存在列表中

二、正则表达式

正则的方法:
1、findall() :所有结果返回到一个列表里
2、search() :返回匹配到的第一个对象,对象可以调用group()返回结果
3、match() :只在字符串开始匹配,也返回一个对象,可调用group()
findall() 方法:

1、正则表达式可以进行模糊匹配:

ret = re.findall(r'w\w{2}l', 'hello world')    # 匹配字符串中w开头l结尾中间有两个字符的词
# (加r,声明是原生字符串,避免字符串转义)
print(ret)      # ['worl']

2、元字符

  • “.”  通配符:可以代指除换行符之外的所有字符,一个通配符只能代指任意一个字符
ret = re.findall('w..l', 'hello world')    # 匹配字符串中w开头l结尾中间有两个字符的字符串
print(ret)      # ['worl']
  • “^” 上尖角号,只在字符串开始的位置匹配匹配
ret = re.findall('^h..o', 'hjklshllo')  # 只在字符串的开始位置进行匹配,匹配不上就结束,不匹配后面的内容
print(ret)    # []

ret = re.findall('^h..o', 'hjkoshllo')
print(ret)    # ['hjko']
  • “$”符, 只在字符串结尾匹配
ret = re.findall('h..o$', 'hjkoshllo')
print(ret)    # ['hllo']

ret = re.findall('h..o$', 'hjkoshlyto')
print(ret)    # []
  • “*”号,重复匹配(*还可以代指0个) ,*代指的个数是0到无穷
ret = re.findall('h.*o', 'hjkoshlytg')      # *表示重复前面多个.  既只要是以h开头o结尾的都行
print(ret)      # ['hjko']

ret = re.findall('h*', 'hhhhjlhl')        # 匹配多个h
print(ret)      # ['hhhh', '', '', 'h', '', '']

ret = re.findall('ah*', 'sdahhh')       # 贪婪匹配,既按最多的匹配
print(ret)      # ['ahhh']

ret = re.findall('ah*?', 'sdahhh')     # 后加?变为惰性匹配,既按最少的匹配
print(ret)      # ['a']
  • “+”号,重复匹配,同*,但是个数最少为1个,如果是0个匹配不了,范围是1到无穷
ret = re.findall('ah+', 'asdahhhjlhl')   # 匹配以ah开头的内容
print(ret)    # ['ahhh']

ret = re.findall('a+b', 'aaabsdbhbhabj')
print(ret)    # ['aaab', 'ab']
  • “?”号,匹配的范围是[0, 1]个
ret = re.findall('a?b', 'aaabsdhbhabj')   # 匹配[0, 1]个a
print(ret)      # ['ab', 'b', 'ab']
  • “{}”大括号,自定义匹配的次数
ret = re.findall('a{2}b', 'aaabhaabhab')   # 匹配2个a开头,b结尾共3位的字符
print(ret)  # ['aab', 'aab']

ret = re.findall('a{1,3}b', 'aaaabfaabhhab')   # 匹配1-3个a,以b结尾的字符
# 注意:{1,3} 之间不能有空格,不能写成{1, 3}
print(ret)  # ['aaab', 'aab', 'ab']

ret = re.findall('a{1, }b', 'aaaaaaaab')   # {1,} 什么都不加默认匹配的是正无穷
print(ret)      # ['aaaaaaaab']

ret = re.findall('a{1,3}b', 'aaaab')   # 匹配1-3个a,贪婪匹配原则,既默认按多的匹配
print(ret)  # ['aaab']

3、字符集

    取消元字符的特殊功能   
  • []
ret = re.findall('a[dc]b', 'adb')      # 匹配既可以是adb也可以是acb,只能2选一,注意[]里面不用逗号隔开
print(ret)  # ['adb']

ret = re.findall('[a-z]', 'adb')       # 表示一个范围
print(ret)  # 'a', 'd', 'b']

[]字符集还有取消元字符的特殊功能,(\ ^ -)例外:

ret = re.findall('[w,.]', 'awdb')     # .此时不是元字符,无特殊意义,而是一个普通的字符
print(ret)    # ['w']

ret = re.findall('[w,,]', 'awdb')
print(ret)     # ['w']
“^”放在[]里面,表示取反:
ret = re.findall('[^w]', 'awdb')   # 匹配除W以外的所有字符
print(ret)  # ['a', 'd', 'b']

ret = re.findall('[^1,4]', 'a1wd42b')   # 注:取反的是(1,4) 整体
print(ret)  # ['a', 'w', 'd', '2', 'b']

4、\ 字符集

反斜杠后跟元字符去除特殊功能;反斜杠后跟普通字符实现特殊功能
"""
\d 匹配十进制数;相当于类[0-9]
\D 匹配任意非数字字符;相当于类[^0-9]
\s 匹配任意空白字符;相当于类[\t\n\r\f\v]
\S 匹配任何非空白字符;相当于类[^ \t\n\r\f\v]
\w 匹配任意字母数字字符;相当于类[a-zA-Z0-9]
\W 匹配任何人非字母数字字符;相当于类[^a-zA-Z0-9]
\b: 匹配一个特殊字符的边界,就是单词和空格间的位置
"""
ret = re.findall(r'\d{8}', 'qeqwe45454455qws1245')
print(ret)     # ['45454455']  只能匹配到1组,因为后面数字的不够8位

ret = re.findall(r'\d{8}', 'qeqwe45454455qws12456541')
print(ret)      # ['45454455', '12456541']  匹配到2组,

ret = re.findall(r'\D{4}', 'qeqwe4555qws41')   # 大括号里面的数字4代表的是4个字符一组
print(ret)     # ['qeqw']

ret = re.findall(r'\s', 'we4 g1')         # 匹配空白符
print(ret)      # [' ']

ret = re.findall(r'\sw', 'ws4 wsg1')       # 匹配空白符加w
print(ret)      # [' w']

ret = re.findall(r'\w', 'w4 g1')   # 匹配空白符
print(ret)      # ['w', '4', 'g', '1']

ret = re.findall(r'hello\b', 'hello, you is cat? ')   # 匹配出你想要的且是一个单词的内容
print(ret)      # ['hello']

search() 方法:     匹配出第一个满足条件的结果

ret = re.search('lo', 'hello, youlo? ')   # 匹配出你想要的且是一个单词的内容
print(ret)   # <_sre.SRE_Match object; span=(3, 5), match='lo'>
print(ret.group())   # lo

ret = re.search('a.', 'asd')
print(ret.group())   # as

ret = re.search(r'a\.', 'asd')   # 报错,因为被索引字符串里面没有"."

print(ret.group())   # AttributeError: 'NoneType' object has no attribute 'group'

ret = re.search(r'a\.', 'a.sd')
print(ret.group())   # a.

ret = re.search(r'a\+', 'a+sd')
print(ret.group())   # a+
ret = re.search(r'\\c', r'asd\c')   # \\不加r会报错
print(ret.group())   # \c

ret = re.search(r'\\', r'asd\c')   # \\不加r会报错
print(ret.group())   # \

注意:加r是告诉python解释器,\\就是原生字符,不需要转义,就直接把2个\送给re模块

ret = re.search('\\\\', r'asd\c')   # 等同于上面的语句,
print(ret.group())   # \c

注意:因为在Python解释器里面\也是有特殊意义的,所以当传入4个\时,python解释器通过转义,变为2个\,然后传给re模块;在re模块里面,\同样是有特殊意义,所以把2个\转义为1个\,然后进行匹配

5() :分组    |:或

ret = re.search('(as)+', r'asasd\c')   # 匹配括号里面一个组的字符,而不是单个字符
print(ret.group())   # asas

ret = re.findall(r'www.(\w+).com', 'www.123swd.com')   # 涉及到组时,只会把组里面的内容匹配出来
print(ret)   # ['123swd']

ret = re.findall(r'www.(?:\w+).com', 'www.123swd.com')   # 加问号冒号(?:)取消组的优先级
print(ret)   # ['www.123swd.com']

ret = re.search('(as)|', r'asd35')   # 匹配括号里面一个组的字符,而不是单个字符
print(ret.group())   # as

ret = re.search('(as)|3', r'asd35')   # as或3,优先匹配第一个,谁在前输出谁
print(ret.group())   # as

ret = re.search('(as)|3', r'3as5e')
print(ret.group())   # 3

三、稍复杂一点儿的正则

ret = re.search(r'(?P<id>\d{3})', 'asdsf124c4vss7').group('id')  # 给匹配到的三个数字起一个名字,叫id;?<名字>是固定写法
print(ret)      # 124

# 后面匹配项只能是 '数字/数字或字母' 的形式,/前的一个字符一定不能为字母
ret = re.search(r'(?P<id>\d{3})/(?P<name>\w{3})', 'wa124/bug')
print(ret.group())      # 124/bug
print(ret.group('id'))      # 124
print(ret.group('name'))    # bug

ret = re.match('asd', 'sdsasd')
print(ret)    # None

ret = re.split('s', 'qwesdc')   # 通过s对后面的字符串进行分割
print(ret)  # ['qwe', 'dc']

ret = re.split('[eh]', 'qwesdhtrc')   # 先通过e对后面的字符串进行分割,然后通过h对前面分割开的两部分继续分割
print(ret)  # ['qw', 'sd', 'trc']

ret = re.split('[eh]', 'hqwesdhtrc')
print(ret)  # ['', 'qw', 'sd', 'trc']   列表第一个元素为空,是因为字符串h前面没有其他的字符

ret = re.sub('臭猪', '小baby', '双双是臭猪')    # ('原内容', '新内容', '对象')
print(ret)  # 双双是小baby

ret = re.subn('臭猪', '小baby', '双双是臭猪,小臭猪')    # ('原内容', '新内容', '对象'),该方法会输出替换的次数
print(ret)  # ('双双是小baby,小小baby', 2)

ret = re.sub('q..s', 's..z', 'zaqwesf')    # ('原内容', '新内容', '操作对象')
print(ret)  # zas..zf


ret = re.findall(r'\.com', 'adsdas.comasdaf')
print(ret)      # ['.com']

obj = re.compile(r'\.com')   # 为了避免重复,把规则编译为一个对象,下次使用只需调用对象即可
ret = obj.findall('adsdas.comasdaf')   # 等价于 re.findall(r'\.com', 'adsdas.comasdaf')
print(ret)      # ['.com']

ret = re.finditer(r'\d', 'a2da7f')   # 把结果封装为一个迭代器,既此时ret为一个迭代器
print(ret)      # <callable_iterator object at 0x000001E3DDFF1320>
print(next(ret))    # <_sre.SRE_Match object; span=(1, 2), match='2'>
print(next(ret).group())    # 2

--结束END--

本文标题: python 正则表达式

本文链接: https://www.lsjlt.com/news/181316.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 正则表达式
    正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2 ...
    99+
    2023-01-30
    正则表达式 python
  • python正则表达式
    笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!-...
    99+
    2023-01-30
    正则表达式 python
  • Python 正则表达式:compile
    本文以匹配×××ID为例,介绍re模块的compile与match的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化             +        re.match(要匹配的字符串): 从字符串开 头/...
    99+
    2023-01-31
    正则表达式 Python compile
  • Python 正则表达式:search
    本文介绍re模块的search的用法复杂匹配 = re.compile(正则表达式): 将正则表达式实例化             +        re.search(要匹配的字符串): 从字符串开头 开始匹配简单匹配 = re.sear...
    99+
    2023-01-31
    正则表达式 Python search
  • Python 正则表达式:split
    作用:用正则表达式的字符分割字符串,正则的字符会被抛弃。本文以 提取URL的地址与参数 为例,介绍re模块的split的用法: 返回值 -> 列表复杂匹配 = re.compile(正则表达式): 将正则表达式实例化         ...
    99+
    2023-01-31
    正则表达式 Python split
  • 在python正则表达式中是怎样正确使用正则表达式
    这篇文章将为大家详细讲解有关在python正则表达式中是怎样正确使用正则表达式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。现在我们已经看了一些简单的正则表达式,那么我们实际在 Python...
    99+
    2023-06-17
  • Python 正则表达式详解
    目录1.正则表达式是什么2.1用正则表达式2.2匹配原理2.3常用函数总结1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法...
    99+
    2022-11-12
  • Python正则表达式分组
    Python正则表达式分组 分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号&ldqu...
    99+
    2022-12-19
    Python正则表达式分组 命名分组 后向引用 前向否定断言 后向否定断言
  • Python 08 re 正则表达式
    . 匹配除换行符以外的任意字符\w 匹配字母或数字或下划线或汉字\s 匹配任意的空白符\d 匹配数字\b 匹配单词的开始或结束^ 匹配字符串的开始$ 匹配字符串的结束 代码/语法 说明* 重复零次或更多次+ 重复一次或更多次 重复零次或一次...
    99+
    2023-01-31
    正则表达式 Python
  • 理解python正则表达式
    在python中,对正则表达式的支持是通过re模块来支持的。使用re的步骤是先把表达式字符串编译成pattern实例,然后在使用pattern去匹配文本获取结果。 其实也有另外一种方式,就是直接使用re模块...
    99+
    2022-06-04
    正则表达式 python
  • Python正则表达式 re(regul
    1. 点..: 代表一个字符 (这个跟linux的正则表达式是不同的,那里.代表的是后面字符的一次或0次出现)2. 转义\\或者r'\': 如 r'python\.org' (对.符号的转义)3. ^ 非或叫做排除如[^abc]: 任何以非...
    99+
    2023-01-31
    正则表达式 Python regul
  • Python中的正则表达式
    正则表达式 是包含文本和特殊字符的字符串, 为高级的文本模式匹配, 抽取, 与文本形式的搜索和替换功能提供了基础 Python通过标准库re模块来支持正则表达式 模式匹配的两种方法完成匹配(模式匹配) 搜索(search())...
    99+
    2023-01-31
    正则表达式 Python
  • python学习--正则表达式
    正则表达式是一种用来匹配字符串的强有力的工具它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。Python支持的正则表达式元字符和语法:语法说明实例完整匹配的字...
    99+
    2023-01-31
    正则表达式 python
  • 11 Python的正则表达式
    概述         在上一节,我们介绍了Python的文件操作,包括:打开文件、读取文件、写入文件、关闭文件、文件指针移动、获取目录列表等内容。在这一节中,我们将介绍Python的正则表达式。正则表达式是一种强大的工具,用于在文本中进行匹...
    99+
    2023-09-08
    python 正则表达式 re模块 re.search re.match
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • 正则表达式
    2019-01-16 作用 :     路由匹配,表单信息的验证  (字符串匹配) 信息提取(在大段文本中提取信息,爬虫) 字符串的提取和校验 []在中括号内匹配任意项  [^]不匹配中括号中的任意一项    [0-9]  0123......
    99+
    2023-01-30
    正则表达式
  • Python全栈之正则表达式
    目录1. 正则表达式_匹配单个字符2. 正则表达式_匹配多个字符3. 正则表达式_匹配分组小提示:4. 小练习答案:总结1. 正则表达式_匹配单个字符 正则表达式在线测试: http...
    99+
    2022-11-12
  • python正则表达式模块re
    正则表达式的特殊元素 匹配符号 描述 '.'(点dot) 在默认模式下,它匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符 '^'(Caret) 匹配以字符串开头,...
    99+
    2023-01-30
    模块 正则表达式 python
  • Python正则表达式初识(一)
    首先跟大家简单唠叨两句为什么要学习正则表达式,为什么在网络爬虫的时候离不开正则表达式。正则表达式在处理字符串的时候扮演着非常重要的角色,在网络爬虫的时候也十分常用,大家可以把它学的简单一些,但是不能不学。尽管网络爬虫相关库给我们提供了丰富的...
    99+
    2023-01-31
    正则表达式 Python
  • Python中正则表达式详解
    基础篇 正则表达式在python中运用的非常多,因为他可以进行任意的匹配,可以匹配我们想要提取的信息。当我们接触正则的时候你就会知道正则的强大。正则有一个库re 在一些工程中我们会经常调用正则的库来做与匹配...
    99+
    2022-06-04
    详解 正则表达式 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作