学习python编程之正则表达式(一)

个人觉得,正则表达式是最基本的东西,因为,正则表达式很具有通用性,无论何种语言,或者系统都有正则表达式的影子,

并且各种文件操作,已经网页的数据获取,都可以用到正则表达式,所以我决定第一章开始介绍正则表达式.

什么是是正则表达式:

    简单的说,正则表达式就是一些有字符和图书符号组成的字符串,它描述了模式 或者表示的多种字符.或者换句话说就是能按照某种模式匹配(matching)一系列有相似特征的字符串.

匹配(matching):

    是指判断一个字符串能否从起始处全部或者部分地匹配某个模式。

    

    python的标准库中提供re模块来支持正则表达式.现在我们了解的正则的基本概念,下面就开始了解正则表达式吧.


1. 普通字符:

        普通字符,就是没有任何特殊含义的字符,例如数字,字母.

下面所介绍的正则表达式都是最基本、最普通的。它们仅仅用一个简单的字符串构造成一个匹配字符串的模式:

该字符串由正则表达式定义。下面所示为几个正则表达式和它们所匹配的字符串。

正则表达式模式 匹配的字符串
namename
Python Python
20182018
这样的表达式,只能匹配相同的东西,这个可以用来匹配文件或者文章里某个词语出现的次数.这样的使用方法太过单一,所以我们需要深入的学习就是元字符.

2.元字符:

    元字符:特殊符号或者特殊符号加上字符的组合,即所谓的元字符 .

表 示 法 描 述 正则表达式示例
符号
literal 匹配文本字符串的字面值 literal foo
re1|re2 匹配正则表达式 re1 或者 re2 foo|bar
. 匹配任何字符(除了\n 之外) b.b
^ 匹配字符串起始部分 ^Dear
$ 匹配字符串终止部分 /bin/*sh$
* 匹配 0 次或者多次前面出现的正则表达式 [A-Za-z0-9]*
+ 匹配 1 次或者多次前面出现的正则表达式 [a-z]+\.com
? 匹配 0 次或者 1 次前面出现的正则表达式 goo?
{N} 匹配 N 次前面出现的正则表达式 [0-9]{3}
{M,N} 匹配 MN 次前面出现的正则表达式 [0-9]{5,9}
[…] 匹配来自字符集的任意单一字符 [aeiou]
[..x-y..] 匹配 xy 范围中的任意单一字符 [0-9], [A-Za-z]
[^…] 不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) [^aeiou], [^A-Za-z0-9]
(*|+|?|{})? 用于匹配上面频繁出现/重复出现符号的非贪婪版本(*+?{}.*?[a-z]
(…) 匹配封闭的正则表达式,然后另存为子组 ([0-9]{3})?,f(oo|u)bar

表 示 法 描 述 正则表达式示例
特殊字符
\d 匹配任何十进制数字,与[0-9]一致(\D \d 相反,不匹配任何非数值型的数字) data\d+.txt
\w 匹配任何字母数字字符,与[A-Za-z0-9_]相同(\W 与之相反) [A-Za-z_]\w+
\s 匹配任何空格字符,与[\n\t\r\v\f]相同(\S 与之相反) of\sthe
\b 匹配任何单词边界(\B 与之相反) \bThe\b
\N 匹配已保存的子组 N(参见上面的(…)) price: \16
\c 逐字匹配任何特殊字符 c(即,仅按照字面意义匹配,不匹配特殊含义) \., \\, \*
\A(\Z) 匹配字符串的起始(结束)(另见上面介绍的^$\ADear
扩展表示法
(?iLmsux) 在正则表达式中嵌入一个或者多个特殊“标记” 参数(或者通过函数/方法) ?x),(? im
(?:…) 表示一个匹配不用保存的分组 (?:\w+\.)*
(?P<name>…) 像一个仅由 name 标识而不是数字 ID 标识的正则分组匹配 (?P<data>)
(?P=name) 在同一字符串中匹配由(?P<name)分组的之前文本 (?P=data)
(?#…) 表示注释,所有内容都被忽略 (?#comment)
(?=…) 匹配条件是如果出现在之后的位置,而不使用输入字符串;称作正向前视断言 (?=.com)
(?!…) 匹配条件是如果不出现在之后的位置,而不使用输入字符串;称作负向前视断言 (?!.net)
(?<=…) 匹配条件是如果出现在之前的位置,而不使用输入字符串;称作正向后视断言 (?<=800-)
(?<!…) 匹配条件是如果不出现在之前的位置,而不使用输入字符串;称作负向后视断言 (?<!192\.168\.)
(?(id/name)Y|N ) 如果分组所提供的 id 或者 name(名称)存在,就返回正则表达式的条件匹配 Y,如
果不存在,就返回
N|N 是可选项
(?(1)y|x)

这个表个内的东西,就是需要我们深入学习的内容.现在,我们大概看一下就可以了,知道有哪些东西.

我们再了解一下核心函数和使用方法,我们先大概的了解一下.下一章会有详细的代码说明.

函数/方法 描 述

仅仅是 re 模块函数
compile(patternflags = 0) 使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象

re 模块函数和正则表达式对象的方法
match(patternstringflags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功,就返回
匹配对象; 如果失败,就返回
None
search(patternstringflags=0) 使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹
配对象; 如果失败,则返回
None
findall(patternstring [, flags] )查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
finditer(patternstring [, flags] )findall()函数相同,但返回的不是一个列表,而是一个迭代器。对于每一次匹配,迭
代器都返回一个匹配对象
split(patternstringmax=0)根据正则表达式的模式分隔符, split 函数将字符串分割为列表,然后返回成功匹配的
列表,分隔最多操作
max 次(默认分割所有匹配成功的位置)

re
模块函数和正则表达式对象方法
sub(patternreplstringcount=0) 使用 repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义 count, 否则就
将替换所有出现的位置(另见
subn()函数,该函数返回替换操作的数目)
purge() 清除隐式编译的正则表达式模式

常用的匹配对象方法(查看文档以获取更多信息)
group(num=0) 返回整个匹配对象,或者编号为 num 的特定子组
groups(default=None) 返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组)
groupdict(default=None) 返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键(如果没有
成功匹配,则返回一个空字典)

常用的模块属性(用于大多数正则表达式函数的标记)
re.Ire.IGNORECASE 不区分大小写的匹配
re.Lre.LOCALE 根据所使用的本地语言环境通过\w\W\b\B\s\S 实现匹配
re.Mre.MULTILINE ^$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始
和结尾
re.Srer.DOTALL .”(点号)通常匹配除了\n(换行符)之外的所有单个字符;该标记表示“.”(点号)
能够匹配全部字符
re.Xre.VERBOSE 通过反斜线转义, 否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非
在一个字符类中或者允许注释并且提高可读性

                                               以上表格均来自<<python核心编程第三版>>.


下一章开始,我们就正式开始从代码认识各种元字符和各种方法的使用.





已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页