Python标准库之正则表达式(re库)_正则表达式标准库re-程序员宅基地

技术标签: python  正则表达式  

正则表达式

正则表达式(或RE)指定了一组与之匹配的字符串;该模块中的函数可让您检查特定字符串是否与给定的正则表达式匹配(或给定的正则表达式是否与特定的字符串匹配,这取决于同一件事)。

正则表达式语法

pattern[过滤模式]
从string中匹配出符合条件的字符
    1.字符集合
        如:[abcde],[12345]
    2.字符范围
        如:[a-z],[0-9]

    1.+(子表达式后),匹配符合子表达式一次和一次以上的内容 (>=1)
        如:('[0-9]+')
    2.*(子表达式后),匹配符合子表达式零次和零次以上的内容 (>=0)
        如:('[0-9]*')
    3.?(子表达式后),匹配符合子表达式零到一次的内容 (0-1)
        如:('[0-9]?')
    4.$,匹配输入行尾
    5.^,匹配输入行头

    1.{n},匹配n次

    1.\d,匹配一个数字字符,等价于[0-9]
    2.\D,匹配一个非数字字符,等价于[^0-9]
        ^在中括号中代表’非‘
    3.\s,匹配任何不可见字符
        如:空格,制表符,换页符等等
    4.\S,匹配任何可见字符
    5.\w(word),匹配包括下划线的任何单词字符,等价于[A-Za-z0-9_]
    6.\W,匹配任何非单词字符,等价于[^A-Za-z0-9_]
    7.\b,匹配一个单词的边界,也就是指单词和空格间的位置
    8..,匹配除了'\n'和'\r'以外的单个字符

    1.|,将两个匹配条件进行逻辑’或‘运算
    2.(),将(和)之间的表达式定义为“组”(group)

    1.贪婪模式:默认为贪婪模式,匹配尽量多的字符
    2.非贪婪模式:匹配尽量少的字符,在次数限制操作符后面加上'?'转换为非贪婪模式

[]

用于指示一组字符。在一组中:

  • 字符可以单独列出,例如[amk]将匹配’a’,‘m’或’k’。
  • 可以通过给两个字符并用’-‘隔开来表示字符范围,例如[az]可以匹配任何小写ASCII字母,[0-5]
    [0-9]可以匹配所有的两位数字00到59,并且[0-9A-Fa-f]将匹配任何十六进制数字。如果-被转义(例如[a
    -z]),或者如果将其放置为第一个或最后一个字符(例如[-a]或[a-]),则它将匹配文字’-’。
  • 特殊字符在集合内失去其特殊含义。例如,[(+ *)]将匹配任何文字字符’(’,’+’,’*‘或’)’。
  • 集合中也接受\ w或\ S之类的字符类(在下面定义),尽管它们匹配的字符取决于是否启用了ASCII或LOCALE模式。
  • 可以通过补充集合来匹配不在范围内的字符。如果集合中的第一个字符是’^’,则所有不在集合中的字符都将被匹配。例如,[^5]将匹配’5’以外的任何字符,而[^^]将匹配’^'以外的任何字符。 ^如果不是集合中的第一个字符,则没有特殊含义。
  • 要在集合中匹配文字’]’,请在其前面加上反斜杠,或将其放在集合的开头。例如,[()[] {}]和[]()[{}]都将与括号匹配。
  • 将来可能会增加对嵌套集和集操作的支持(如Unicode技术标准#18)。这将更改语法,因此为了便于进行此更改,暂时将在不明确的情况下引发FutureWarning。包括以文字’[‘开头或包含文字字符序列’-’,’&&’,’~~‘和’||'的集合。

为避免警告,请使用反斜杠将其转义。

例如:

message = 'fjlrb2i4t9gjibuspabr'
result = re.search('[abcde]',message)
print(result)
result = re.search('[a-z][a-d]',message)
print(result)
result = re.search('[a-z][0-9]',message)
print(result)
result = re.findall('[a-z][0-9]',message)
print(result)
<_sre.SRE_Match object; span=(4, 5), match='b'>
<_sre.SRE_Match object; span=(3, 5), match='rb'>
<_sre.SRE_Match object; span=(4, 6), match='b2'>
['b2', 'i4', 't9']

+

使结果RE匹配先前RE的1个或多个重复。 ab +将与“ a”匹配,后跟任意非零数目的“ b”; 它不会仅与“ a”匹配。

例如:

message = 'verb very never every'
result = re.findall(r'\w+er\B',message)
print(result)
['ver', 'ver', 'ever']

*

使结果RE与前面的RE的0个或多个重复匹配,并尽可能多地重复。 ab *将匹配“ a”,“ ab”或“ a”,后跟任意数量的“ b”。

例如:

message = 'h25tv988yrgnbn25uyt3n9y2'
result = re.findall('[a-z]*[0-9][a-z]',message)
print(result)
['5t', '8y', '5u', 'yt3n', '9y']

?

使结果RE匹配先前RE的0或1个重复。 ab? 将匹配“ a”或“ ab”。

例如:

message = 'ccc2356145507'
result = re.findall('ccc\d+?',message)<
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012362185/article/details/117064489

智能推荐

vc++生成的Debug,cpp,html,ncb,opt,dsp,dsw文件是干什么的,有什么区别?_def dsw dsp-程序员宅基地

文章浏览阅读761次。.APS:存放二进制资源的中间文件,VC把当前资源文件转换成二进制格式,并存放在APS文件中,以加快资源装载速度。资源辅助文件。.BMP:位图资源文件。.BSC:浏览信息文件,由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(.SBR)中生成,BSC文件可以用来在源代码编辑窗口中进行快速定位。用于浏览项目信息的,如果用source brower的话就必须有这个文件。可以在project options里去掉Generate Browse Info_def dsw dsp

Oracle case when 实现数据字段数据的判断过滤_oracle筛选case when的字段-程序员宅基地

文章浏览阅读3.4k次。需求现在有一份管线数据,表中含有字段buildTime说明了管线的建设日期,我们需要按时间段统计管线的数据 这是,我们需要对管线表中建设日期所对应的字段进行分类 实现如下: 实现对现有的数据进行分类判断过滤,使用到了 case whencase whencase when 实现了对数据的不同范围进行判断过滤并重新规范的过程(个人理解) 语法:  CASE  WHEN condition1_oracle筛选case when的字段

python 笔记 :Gym库 (官方文档笔记)_python gym-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏51次。Gym是一个开发和比较强化学习算法的工具箱。它不依赖强化学习算法结构,并且可以使用很多方法对它进行调用。1 Gym环境这是一个让某种小游戏运行的简单例子。这将运行 CartPole-v0 环境实例 1000 个时间步,在每次迭代的时候都会将环境初始化(env.render)。运行之后你将会看到一个经典的推车杆问题import gymenv = gym.make('CartPole-v0')env.reset()for _ in rang..._python gym

脉冲神经网络学习笔记(综述)_脉冲神经网络的神经元综述-程序员宅基地

文章浏览阅读3.2w次,点赞26次,收藏143次。脉冲神经网络学习笔记,是综述性质的学习笔记_脉冲神经网络的神经元综述

Spring 依赖注入 (构造函数注入、Setter注入 、嵌套注入、 文件方式注入)-程序员宅基地

文章浏览阅读1.3k次。依赖注入方式-基于构造函数public class ScrewDriver{ private Header header; public ScrewDriver(Header header){ this.header = header; }}-基于Setter方法public class ScrewDriver{ private Header header; public...

linux内核代码中的字模-程序员宅基地

文章浏览阅读258次。用Source Insight打开linux内核源码,搜索font,会发现有各种点阵字模。打开8*16的字模哈哈,是不是看起来是象形文字,这就是LCD屏幕显示字符的底层原理,就是一个灯的亮灭。

随便推点

区块链100问--由浅入深(长期更新)_block chain的去中心化是通过什么网络存储和处理数据-程序员宅基地

文章浏览阅读3.9k次。1. Blockchain–区块链区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。是一个共享的分布式账本,其中交易通过附加块永久记录。2. Block–区块在加密资产网络中,数据会以文件的形式被永久记录,我们称这些文件为区块。一个区块是一些或所有最新加密资产交易的记录集,且未被其他先前的区块记录。3. Node–节点由区块链网络的参与者操作的分类帐的副本..._block chain的去中心化是通过什么网络存储和处理数据

POSIX C和ANSI C、GNU C以及ISO C有什么区别?-程序员宅基地

文章浏览阅读1k次。K&R C 1978年,丹尼斯·里奇(Dennis Ritchie)和Brian Kernighan合作出版了《C程序设计语言》的第一版。书中介绍的C语言标准也被C语言程序设计师称作“K&R C”,第二版的书中也包含了一些ANSI C的标准。K&R C主要介绍了以下特色: 结构(struct)类型 长整数(long int)类型 无符号整数(unsigned int)类型 _posix c和ansi c

Codeforces Round #499 (Div. 2) C. Fly 数学公式推导_codeforcesc. fly-程序员宅基地

文章浏览阅读264次。Natasha is going to fly on a rocket to Mars and return to Earth. Also, on the way to Mars, she will land on n − 2 intermediate planets. Formally: we number all the planets from 1 to n . ..._codeforcesc. fly

QT-UI界面设计图标能显示,但是运行时候不显示_qt中ui界面显示正常,运行之后就不显示了-程序员宅基地

文章浏览阅读8.6k次,点赞22次,收藏32次。项目场景:我在用QT做画板的时候想给MainWindows添加带有图片的工具栏,但是遇到了运行窗口图片显示不出来的问题,,但是我明明在UI界面添加了!!!问题描述:解决方案:1.找到左侧的项目,然后点击取掉勾选Shadow build,然后对项目进行重新构建!!!(一定要记得)2.然后我们再运行看看结果..._qt中ui界面显示正常,运行之后就不显示了

java练习题8_java 8 训练题-程序员宅基地

文章浏览阅读296次。编写一个JFrame窗口,要求如下:在窗口的NORTH区放置一个JPanel面板。JPanel面板放置如下组件: (1) JLable标签,标签文本为“兴趣”,右边接着是三个JCheckBox多选按钮,选项分别是“羽毛球”、“乒乓球”、“唱歌”。可以多选。 (2) JLabel标签,标签文本为“性别”,右边接着是两个JRadioButton按钮,选项分别是“男”、“女”。置成单选按钮,提示:_java 8 训练题

网络设备主备配置系列3:华为防火墙(路由模式)-程序员宅基地

文章浏览阅读1.7k次。自从推荐主备配置系列以来,许多网友一起与我沟通配置的方法。这两天终于有时间了,决定继续推出华为的。共分两部分,路由模式与透明模式!双机热备,所谓双机热备其实是双机状态备份,当两台防火墙,在确定主从防火墙后,由主防火墙进行业务的转发,而从防火墙处于监控状态,同时主防火墙会定时向从防火墙发送状态信息和需要备份的信息,当主防火墙出现故障后,从防火墙...

推荐文章

热门文章

相关标签