Python:笔记(6)——正则表达式

Python:笔记(6)——正则表达式

re模块

  re模块用于在字符串中执行基于正则表达式模式的匹配和替换python

使用原始字符串

  正则表达式使用 \ 对特殊字符进行转义,好比,为了匹配字符串 ‘python.org’,咱们须要使用正则表达式 'python\.org'。正则表达式

  可是Python 的字符串自己也用 \ 转义,因此上面的正则表达式在 Python 中应该写成 'python\\.org',这会很容易陷入 \ 的困扰中,所以,咱们建议使用 Python 的原始字符串,只需加一个 r 前缀,上面的正则表达式能够写成:函数

r'python\.org'

关于中文的匹配

   正则匹配中文,固定形式:[\u4E00-\u9FA5]+。post

import re
str = 'posted @ 2018-11-03 15:00 MrSaber 阅读(82) 评论(0)'
pattern = re.compile(r'[\u4E00-\u9FA5]+\((\d+)\)');
m = pattern.findall(str)
print(m)

re模块的使用步骤

  • 使用 compile 函数将正则表达式的字符串形式编译为一个 Pattern 对象
  • 经过 Pattern 对象提供的一系列方法对文本进行匹配查找,得到匹配结果(一个 Match 对象)
  • 最后使用 Match 对象提供的属性和方法得到信息,根据须要进行其余的操做

 

编译Pattern对象

  compile 函数用于编译正则表达式,生成一个 Pattern 对象,它的通常使用形式以下:spa

re.compile(pattern[, flag])

  其中,pattern 是一个字符串形式的正则表达式,flag 是一个可选参数,表示匹配模式,好比忽略大小写,多行模式等。code

import re
# 将正则表达式编译成 Pattern 对象 
pattern = re.compile(r'\d+')

  在上面,咱们已将一个正则表达式编译成 Pattern 对象,接下来,咱们就能够利用 pattern 的一系列方法对文本进行匹配查找了。Pattern 对象的一些经常使用方法主要有:对象

  • match 方法
  • search 方法
  • findall 方法
  • finditer 方法
  • split 方法
  • sub 方法
  • subn 方法

 

匹配

  咱们主要讨论一下四个匹配方法的区别。blog

match(pattern,string,[,flags])

  检查String的开头是否有字符与pattern匹配。若是成功,返回一个MatchObject,不然返回None。字符串

search(pattern,string,[,flags])

  在String中搜索pattern的第一个匹配值。若是成功,返回一个MatchObject,不然返回None。string

  如下面代码为例,咱们想匹配阅读数,可是阅读不是str的开头,因此match匹配失败。

import re
str = 'posted @ 2018-11-03 15:00 MrSaber 阅读(82) 评论(0)'
pattern = re.compile(r'阅读\((\d+)\)');
m1 = pattern.search(str)
m2 = pattern.match(str)
print(m1) # 阅读(82)
print(m2) # None

findall(pattern,string,[,flags])

  返回String中与pattern匹配的全部未重叠的值,包括空匹配值。若是模式包含分组,将返回与分组匹配的文本列表。若是使用了不止一个分组,那么列表中的每项都是一个元组,包含每一个分组的文本。

finditer(pattern,string,[,flags])

  与findall方法含义相同,可是返回的是一个迭代器对象。迭代器的返回类型是MatchObject的项。

 

分组

  除了简单地判断是否匹配以外,正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组(Group)。好比:

  ^(\d{3})-(\d{3,8})$分别定义了两个组,能够直接从匹配的字符串中提取出区号和本地号码:

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'
相关文章
相关标签/搜索