自动摘要: 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