1、掌握正则表达式的基本用法,常用的方法的使用
2、 match 方法和 search 方法的区别?
3、 如何理解贪婪模式和非贪婪模式
正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本
单字符匹配,多字符匹配,匹配分组,
对文本进行匹配查找的一系列方法
match 方法:从起始位置开始查找,一次匹配
search 方法:从任何位置开始查找,一次匹配
findall 方法:全部匹配,返回列表
finditer 方法:全部匹配,返回迭代器
split 方法:分割字符串,返回列表
sub 方法:替换
re 基本用法(选)
Python re 模块导入:
import re
单字符匹配
.匹配任意字符(除了\n)
[]匹配列丼的字符
\d 匹配数字
\w 匹配单词字符
范例
.匹配任意字符(除了\n)
ret = re.match(".",“abc”)
print(ret.group())
Pattern 对象
提供了对文本进行匹配查找的一系列方法
match 方法:从起始位置开始查找,一次匹配
search 方法:从任何位置开始查找,一次匹配
findall 方法:全部匹配,返回列表
finditer 方法:全部匹配,返回迭代器
split 方法:分割字符串,返回列表
sub 方法:替换
match 方法
字符串的头部戒者指定位置开始查找一次匹配,只要找到了一个匹配的结果就返回
match(string[,pos[,endpos]])
string 是待匹配的字符串
pos 和endpos 可选参数,指定字符串的起始和终点位置默认值分别是 0和len(字符串长度)
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
示例
import re
pattern = re.compile(r’\d+’) # 用于匹配至少一个数字
m = pattern.match(‘one12twothree34four’) # 查找头部,没有匹配
print(m)
m = pattern.match(‘one12twothree34four’, 2, 10) # 从’e’的位置开始匹配,没有
匹配
print(m)
示例2
m = pattern.match(‘one12twothree34four’, 3, 10) # 从’1’的位置开始匹配,正好
匹配
print(m) # 返回一个 Match 对象
print(m.group(0)) # 可省略 0
print(m.start(0)) # 可省略 0
print(m.end(0)) # 可省略 0
print(m.span(0)) # 可省略 0
Match 对象
group([group1, …])获得一个戒多个分组匹配的字符串
group() 戒 group(0) 获得整个匹配的子串
start([group]) 获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引)
end([group]) /获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引
+1)
span([group]) 方法返回 (start(group), end(group))。
## 范例
import re
pattern = re.compile(r’([a-z]+) ([a-z]+)’, re.I) # re.I 表示忽略大小写
m = pattern.match(‘Hello World Wide Web’)
print(m) # 匹配成功,返回一个 Match 对象
print(m.group(0)) # 返回匹配成功的整个子串
print(m.span(0)) # 返回匹配成功的整个子串的索引
print(m.group(1)) # 返回第一个分组匹配成功的子串
print(m.span(1)) # 返回第一个分组匹配成功的子串的索引
print(m.group(2)) # 返回第二个分组匹配成功的子串
print(m.span(2)) # 返回第二个分组匹配成功的子串
print(m.groups()) # 等价于 (m.group(1), m.group(2), …)
print(m.group(3)) # 不存在第三个分组 IndexError: no such group
search 方法
查找字符串的任何位置, 只匹配一次,只要找到了一个匹配的结果就返回
search(string[, pos[, endpos]])
string 是待匹配的字符串
pos 和 endpos 可选参数,指定字符串的起始和终点位置
当匹配成功时,返回一个 Match 对象,如果没有匹配上,则返回 None。
范例
import re
pattern = re.compile(’\d+’)
m = pattern.search(‘one12twothree34four’) # 这里如果使用 match 方法则不匹配
print(m.group())
m = pattern.search(‘one12twothree34four’, 10, 30) # 指定字符串区间
print(m.group())
print(m.span())
贪婪模式与非贪婪模式
贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配 ( * );
非贪婪模式:在整个表达式匹配成功的前提下,尽可能少的匹配 ( ? );
Python 里数量词默认是贪婪的。
示例一
import re
str = ‘abbbc’
贪婪模式
pattern = re.compile(r’ab*’) # * 决定了尽可能多匹配 b,结果是 abbb
result = pattern.match(str)
print(result.group())
非贪婪模式
pattern = re.compile(r’ab*?’) # *? 决定了尽可能少匹配 b,结果是 a
result = pattern.match(str)
print(result.group())
pattern = re.compile(r’ab+?’) # *? 决定了尽可能少匹配 b,结果是 ab
result = pattern.match(str)
print(result.group())
示例二
import re
贪婪模式
str = “aa
pattern = re.compile(r’