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

test1
bb
test2
cc”
pattern = re.compile(r’
.
’) # 决 定 了 尽 可 能 多 匹 配 b, 结 果 是

test1
bb
test2
result = pattern.search(str) print(result.group()) # 非贪婪模式 str = "aa
test1
bb
test2
cc" pattern = re.compile(r'
.*?
') # *? 决定了尽可能少匹配 b,结果是
test1
result = pattern.search(str) print(result.group())

相关文章:

  • 2022-01-14
  • 2021-05-17
  • 2021-10-06
猜你喜欢
  • 2021-06-01
  • 2022-12-23
相关资源
相似解决方案