0%

第十五节:正则表达式

自动摘要: title:第十五节:正则表达式 tags: 课后解答 url:250.html id:250 categories: 学习 教学 date:2018053 ……..

title: 第十五节:正则表达式
tags:
- 课后解答
url: 250.html
id: 250
categories:
- 学习
- 教学
date: 2018-05-30 15:23:13

1.1正则表达式的大致匹配过程是:

1.依次拿出表达式和文本中的字符比较, 2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 3.如果表达式中有量词或边界,这个过程会稍微有一些不同。

1.2. 数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。 贪婪模式,总是尝试匹配尽可能多的字符; 非贪婪模式则相反,总是尝试匹配尽可能少的字符。 Python里数量词默认是贪婪的。 例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。 而如果使用非贪婪的数量词”ab*?”,将找到”a”。    

正则表达式

代表的匹配字符

[0-9]

0123456789任意之一

[a-z]

小写字母任意之一

[A-Z]

大写字母任意之一

\d

等同于[0-9]

\D

等同于[^0-9]匹配非数字

\w

等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线

\W

等同于[^a-z0-9A-Z_]等同于上一条取非

下面列举一些正则表达式里的元字符及其作用

元字符

说明

.

代表任意字符

|

逻辑或操作符

[ ]

匹配内部的任一字符或子表达式

[^]

对字符集和取非

定义一个区间

\

对下一字符取非(通常是普通变特殊,特殊变普通)

匹配前面的字符或者子表达式0次或多次

*?

惰性匹配上一个

匹配前一个字符或子表达式一次或多次

+?

惰性匹配上一个

?

匹配前一个字符或子表达式0次或1次重复

{n}

匹配前一个字符或子表达式

{m,n}

匹配前一个字符或子表达式至少m次至多n次

{n,}

匹配前一个字符或者子表达式至少n次

{n,}?

前一个的惰性匹配

^

匹配字符串的开头

\A

匹配字符串开头

$

匹配字符串结束

[\b]

退格字符

\c

匹配一个控制字符

\d

匹配任意数字

\D

匹配数字以外的字符

\t

匹配制表符

\w

匹配任意数字字母下划线

\W

不匹配数字字母下划线

1.3. 反斜杠的问题

与大多数编程语言相同,正则表达式里使用”\“作为转义字符,这就可能造成反斜杠困扰。 假如你需要匹配文本中的字符”\“,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\\“: Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\"表示。 同样,匹配一个数字的”\\d”可以写成r”\d”。 有了原生字符串,妈妈再也不用担心我的反斜杠问题

2.1.  re

compile(pattern[,flags] ) 根据包含正则表达式的字符串创建模式对象。 match()决定 RE 是否在字符串刚开始的位置匹配 search()扫描字符串,找到这个 RE 匹配的位置 findall()找到 RE 匹配的所有子串,并把它们作为一个列表返回 finditer()找到 RE 匹配的所有子串,并把它们作为一个迭代器返回 split()将字符串在 RE 匹配的地方分片并生成一个列表, sub()找到 RE 匹配的所有子串,并将其用一个不同的字符串替换 subn()与 sub() 相同,但返回新的字符串和替换次数

res = re.match(pattern, string, flags=0)
#字符串的开头是否能匹配正则表达式。返回_sre.SRE_Match对象,如果
#不能匹配返回None。
# 如果匹配的话,res.string可以获得原始的字符串,并不是匹配的字符串 

re.sub(pattern, repl, string, count=0, flags=0)

#找到 RE 匹配的所有子串,并将其用repl替换。可选参数 
#count 是模式匹配後替换的最大次数;count 必须是非负整数。缺省值
#是 0 表示替换所有的匹配。如果无匹配,字符串将会无改变地返回。如
#果有匹配,则返回替换后的字符串
# pattern='he$' 尾部匹配
# pattern='^he' 头部匹配,等价于match

re.findall(pattern,string)
# 从 string中找到所有 匹配 pattern的子串,作为列表返回
#如果没有匹配的话,返回空数组,可用来当做if的判断条件
#空数组为False
# pattern='he$' 尾部匹配
# pattern='^he' 头部匹配,等价于match

re.search(pattern, string)
#顾名思义,查找,如果找到返回一个match对象,找不到,返回None。
# pattern='he$' 尾部匹配
# pattern='^he' 头部匹配,等价于match

欢迎关注我的其它发布渠道