正则表达式(一) 简单介绍

1.需求

我们在上网的时候会填许多的表单,比如手机号,邮箱,qq号,网址等.那么程序是如何识别我们所填的是否符合规定的格式内呢?这里就要使用正则表达式进行匹配.


2.概述

正则表通常被用来检索、替换那些符合某个模式(规则)的文本。python自1.5起提供了re模块,它提供了perl风格的正则表达式.re模块是python语言拥有全部的正则表达式功能


3.re模块的简单介绍

3.1 re.match函数

功能:
尝试从字符串的起始位置开始匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None

原型:

re.match(pattern,string,flags= 0)

参数:

  • pettern:匹配的正则表达式
  • string: 要匹配的字符串
  • flags: 标志位,用于控制正则表达式的匹配方式 ,如是否匹配大小写,多行匹配等

match()函数常用的标志位

标志位 功能
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使" . " 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
>>> import re
>>> print re.match('www', 'www.runoob.com') #从字符串的起始位置开始匹配,匹配成功了
<_sre.SRE_Match object at 0x00000000054A37E8>
>>> print re.match('com', 'www.runoob.com') #不是从字符串的起始位置开始匹配的,匹配失败
None

>>>a = re.match('www', 'www.runoob.com')
>>> a.group(0) #利用group获取匹配的字段
'www'

3.2 re.search函数

功能:
扫描整个字符串并返回第一个成功的匹配.

原型:

re.search(pattern,string,flags=0)

参数:

参数:

  • pettern:匹配的正则表达式
  • string: 要匹配的字符串
  • flags: 标志位,用于控制正则表达式的匹配方式 ,如是否匹配大小写,多行匹配等

函数常用的标志位

标志位 功能
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使" . " 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

示例:

>>>import re
>>> a = re.search('o', 'www.runoob.com')
>>> a.group(0) #从字符串的任意位置开始匹配,返回匹配到的第一个对象
'o'
>>> a.group(1)

Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    a.group(1)
IndexError: no such group

3.3 re.findall()

功能:
扫描整个字符串,并返回结果列表

原型:

re.findall(pattern,string,flags=0)

参数:

  • pettern:匹配的正则表达式
  • string: 要匹配的字符串
  • flags: 标志位,用于控制正则表达式的匹配方式 ,如是否匹配大小写,多行匹配等

函数常用的标志位

标志位 功能
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使" . " 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

示例:

>>> a = re.findall('o', 'www.runoob.com') #扫描整个字符串,获取所有匹配模式的对象,并返回结果列表
>>> a
['o', 'o', 'o']

这里简单介绍了re模块常用的三个方法.但是我们还没有正真的写完整的正则表达式.下面将会介绍

posted @ 2018-04-08 11:17  数据菜鸟  阅读(115)  评论(0)    收藏  举报