当前位置: 移动技术网 > IT编程>脚本编程>Python > python编程学习之正则表达式操作讲解

python编程学习之正则表达式操作讲解

2018年03月15日  | 移动技术网IT编程  | 我要评论

血牙魔王,蜜桃成熟时3 3d,月殇小说弥言

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

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

什么是是正则表达式:

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

匹配(matching):

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

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

1. 普通字符:

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

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

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

正则表达式模式 匹配的字符串
name name
Python Python
2018 2018

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

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} 匹配 M~N 次前面出现的正则表达式 [0-9]{5,9}
[…] 匹配来自字符集的任意单一字符 [aeiou]
[..x-y..] 匹配 x~y 范围中的任意单一字符 [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 标识而不是数字 ID 标识的正则分组匹配 (P)
(P=name) 在同一字符串中匹配由(P (P=data)
(#…) 表示注释,所有内容都被忽略 (#comment)
(=…) 匹配条件是如果…出现在之后的位置,而不使用输入字符串;称作正向前视断言 (=.com)
(!…) 匹配条件是如果…不出现在之后的位置,而不使用输入字符串;称作负向前视断言 (!.net)
(<=…) 匹配条件是如果…出现在之前的位置,而不使用输入字符串;称作正向后视断言 (<=800-)
( 匹配条件是如果…不出现在之前的位置,而不使用输入字符串;称作负向后视断言 (
((id/name)Y|N ) 如果分组所提供的 id 或者 name(名称)存在,就返回正则表达式的条件匹配 Y,如
果不存在,就返回 N; |N 是可选项
((1)y|x)

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

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

函数/方法 描 述

仅仅是 re 模块函数

compile(pattern, flags = 0) 使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象

re 模块函数和正则表达式对象的方法

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

re 模块函数和正则表达式对象方法

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

常用的匹配对象方法(查看文档以获取更多信息)

group(num=0) 返回整个匹配对象,或者编号为 num 的特定子组
groups(default=None) 返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组)
groupdict(default=None) 返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键(如果没有
成功匹配,则返回一个空字典)

常用的模块属性(用于大多数正则表达式函数的标记)

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网