博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(XWZ)的python学习笔记Ⅶ——正则表达式
阅读量:2173 次
发布时间:2019-05-01

本文共 2460 字,大约阅读时间需要 8 分钟。

正则表达式

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。python中使用re.match()函数来判断给定字符串和正则表达式是否匹配,匹配是从左到右进行匹配,直到正则表达式匹配完或匹配失败,若匹配成功,则返回Match对象,否则返回None

  • \n匹配换行符,\f匹配换页符,\t匹配制表符,\r匹配回车符,\t匹配任何空白字符(空格,制表符,换页符等),\w匹配任何一个数字或字母,\d匹配一个数字,.匹配任意字符。
  • 许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:
    • $: 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 ‘$’。
    • ( ):标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
    • *:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
    • +:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
    • .:匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 .
    • [:标记一个中括号表达式的开始。要匹配 [,请使用
    • ?:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请
    • \: 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’
    • ^:匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符
    • {:标记限定符表达式的开始。要
    • |: 指明两项之间的一个选择。要匹配 |,请使用 |。
  • 限定符用来指定组件应出现的次数:*表示出现0次,1次或多次;+表示出现一次或多次;?表示出现0或1次;{n}表示出现n次;{n,}表示至少出现n次;{n,m}表示出现n到m次。
  • []表达式用来匹配给定范围的***一个字符***,比如[!a-zA-Z\s]可以用来匹配’!’、小写字母、大写字母、空白字符。
  • ()用来进行选择,比如(ab|xy|ef)可以匹配‘ab’、‘xy’、和’ef’。同时还具有提取分组(Group)的功能,放在()中的能够视为一个整体。来看个例子,我们希望能够匹配像前面几个是数字,中间是任意个abc,最后是yesterday、today或tomorrow的字符串:
import res = input('输入一个字符串:')if re.match('\d*(abc)*(yesterday|today|tomorrow)', s):    print('yes')else:    print('no')

运行结果如下:

输入 12yesterday

In [24]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)

输入一个字符串:12yesterday

yes

输入 1abctoday

In [25]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)

输入一个字符串:1abctoday

yes

输入 12345645abcabcabctomorrow

In [26]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)

输入一个字符串:12345645abcabcabctomorrow

yes

如果我们要提取字符串中的某些子串也可以使用():

import res = input('输入一个字符串:')m = re.match('<([a-zA-Z]+)>\{(\d+)\}', s)if m:    print('匹配的串为 %s' % m.group(0))    print('name: %s' % m.group(1))    print('age: %s' % m.group(2))else:    print('匹配失败!')

运行结果如下:

In [28]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)

输入一个字符串:{10}

匹配的串为 {10}
name: Dolly
age: 10
In [30]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)

输入一个字符串:{23}

匹配的串为 {23}
name: Mike
age: 23

group(0)是匹配的字符串。

  • *和+默认是贪婪匹配,即尽可能匹配多的字符串,如果要使用非贪婪匹配则需要再加上?,见下面的例子:
>>> re.match(r'^(\d+)(0*)$', '102300').groups()('102300', '')

由于默认采用贪婪匹配,故(\d+)尽可能匹配多的字符串,导致(0*)匹配空字符串。要使+采用非贪婪匹配在其后加上就行了:

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')

转载地址:http://wqhzb.baihongyu.com/

你可能感兴趣的文章
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>
大小端详解
查看>>
source insight使用方法简介
查看>>
<stdarg.h>头文件的使用
查看>>
C++/C 宏定义(define)中# ## 的含义 宏拼接
查看>>
Git安装配置
查看>>
linux中fork()函数详解
查看>>
C语言字符、字符串操作偏僻函数总结
查看>>
Git的Patch功能
查看>>
分析C语言的声明
查看>>
TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
查看>>