美文网首页Python is Best
Python正则表达式——Re模块

Python正则表达式——Re模块

作者: So_ProbuING | 来源:发表于2017-11-06 16:14 被阅读5次

正则表达式

字符匹配

普通字符:大多数字符和字母都会和自身匹配
元字符:.^$*+?{}[]|()\

re模块

re是python中的正则表达式模块,re模块中包含了正则表达式的语法

API方法

  • findAll() 按照指定的模式查找所有的符合的元素
  • search() 寻找到第一个符合模式的元素就会停止寻找,会返回一个对象
  • compile(reg) 先将正则表达式编译为一个对象,然后再使用编译后的对象调用p.search p.findAll() 后跟要匹配的字符串
  • sub() 还需要一个额外的参数replacement,它会把source中所有匹配的pattern替换成replacement
rep = re.search('aaa','aaacccaaa')
print(rep.group())

元字符解释

  • . 代表除换行符(\n)外的任意字符,只能代指任意一个字符
  • ^ 匹配开头
  • $ 匹配结束
  • * 重复匹配 表示* 前面的元素出现0到多次
re.findall('a*','aaaabbbb')
    • 表示匹配1到多次,至少有1次
  • ?表示匹配0到1次,至多1次
  • {n,m}表示匹配n到m次 贪婪匹配
pre(m) m个连续的pre
pre(m,n) m到n个连续的pre,尽可能多地匹配
pre(m,n)? m到n个连续的pre,尽可能少的匹配

  • []字符集,字符集内的内容代表范围,[m,n]表示m或者是n的一个 [^n]表示匹配除n以外的
    字符集[]还有取消元字符的特殊功能,在[]中的元字符没有特殊功能的定义 例如 [*] 中的 * 就代表 * 这个字符 -除外
  • () 分组功能作为一个整体
  • | 或者
expr1|expr2 匹配expr1或expr2
[a-z] 表示a-z范围中的任意一个字母
  • \ 反斜杠后边跟元字符去除特殊功能,反斜杠后跟普通字符实现特殊功能
    • \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 匹配一个特殊字符的( ,#¥等)边界。
    • \B 匹配非单词边界

Python使用正则表达式

使用正则表达式,相关的功能都位于标准库模块re中。需要先定义一个用于匹配的模式字符串以及一个匹配的对象:源字符串

result = re.match('You','Youareme')

对于更加复杂的匹配,可以先对模式进行编译以加快匹配速度,然后就可以直接使用编译好的模式进行匹配

>>> youpattern = re.compile('You')
>>> youpattern.match('You are mine')
<_sre.SRE_Match object; span=(0, 3), match='You'>

使用match()进行准确匹配

判断单词'Young'是以单词'You'开头

>>> source = 'Young'
>>> m = re.match('You',source)
>>> if m:
...     print(m.group())
... 
You
  • match()函数用于查看源是否以指定模式开头,search()可以检测任何位置的匹配
>>> mm = re.search('ung',source)
>>> if mm:
...     print(mm.group())
... 
ung

使用findall()寻找所有匹配

findall()会返回指定的模式串在源串中出现的所有列表

>>> source_all = 'hello hello hello how are you'
>>> m = re.find
>>> m = re.findall('o',source_all)
>>> m
['o', 'o', 'o', 'o', 'o']

使用split() 按匹配切分

split()将一个字符串切分成由一系列子串组成的列表

>>> m = re.split('l',source_all)
>>> m
['he', '', 'o he', '', 'o he', '', 'o how are you']

使用sub()替换匹配

使用sub替换匹配和字符串的replace有些类似,只不过使用的是模式而不是文本串

>>> m = re.sub('l','?',source_all)
>>> m
'he??o he??o he??o how are you'

定义模式匹配的输出

当使用match()或search()时,所有的匹配会以m.group()的形式返回到对象m中。如果使用括号将自己的某一模式包裹起来,括号中模式匹配得到的结果归入自己的froup中,如果调用m.groups()可以得到包含这些匹配的元组,使用(? P <name> expr) 这样的模式会匹配expr,并将匹配结果存储到名为name的组中

相关文章

网友评论

    本文标题:Python正则表达式——Re模块

    本文链接:https://www.haomeiwen.com/subject/iagxpxtx.html