re.match方法:尝试从字符串的起始位置匹配一个规则,匹配成功就返回match对象,否则返回None。可以使用group()获取匹配成功的字符串。
参数 | 描述 |
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
re.match的基础用法:
(1)无标志位:默认flags=0
import re
str = 'Python is the best language in the world’
res = re.match('P',str)
res.group() # 匹配成功使用group方法取出字符串
match 只能匹配以xxx开头的子符串,第一个参数是正则(pattern),第二个参数是需要匹配的字符串(string)。
(2)有标志位:
import re
str = 'Python is the best language in the world’
res = re.match(‘p’,str,re.I)
res.group()
>>>'P'
•如果同时使用多个标志位使用|分割,比如re.I | re.M
•flags可选标志位
修饰符 | 描述 |
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
str = 'Python is the best language in the world’
res = re.match('(.*) is (.*?) .*',str)
>>> res
<_sre.SRE_Match object; span=(0, 40), match='Python is the best language in the world’>
res.group()
>>>'Python is the best language in the world’
res.group(1)
>>>'Python’
res.group(2)
>>>'the'
常用的匹配规则-匹配字符
符号 | 匹配规则 |
.(点) | 匹配任意1个字符除了换行符\n |
[abc ] | 匹配abc中的任意一个字符 |
\d | 匹配一个数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白,即空格,tab键 |
\S | 匹配非空白,除空格,tab键之类的 |
\w | 匹配单词字符,即a-z、A-Z、0-9、_ |
\W | 匹配非单词字符 |
常用的匹配规则-匹配字符数量
符号 | 匹配规则 |
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少有1次 |
\? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,} | 匹配前一个字符至少出现m次 |
{n,m} | 匹配前一个字符出现从n到m次 |
常用的匹配规则-匹配开头结尾
符号 | 匹配规则 |
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
常用的匹配规则- 分组匹配
符号 | 匹配规则 |
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
re.compile方法
• compile 将正则表达式模式编译成一个正则表达式对象• reg = re.compile (pattern) result = reg.match (string)• 等效于 result = re.match (pattern, string)• 使用 re.compile () 和保存所产生的正则表达式对象重用效率更高
re.search方法
• search 在全文中匹配一次,匹配到就返回• 语法:re.search(pattern, string, flags=0)
import re
re.search('bc','abcd') # 在整个字符串中匹配,匹配到第一个就返回
<_sre.SRE_Match object; span=(1, 3), match='bc’>
re.search('bc','abcd').group()
>>> 'bc’
re.findall方法
• findall 匹配所有返回一个列表,这个方法使用频率较高;• 语法:findall(string[, pos[, endpos]])
参数 | 描述 |
string | 待匹配的字符串。 |
pos | 可选参数,指定字符串的起始位置,默认为 0。 |
endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |
# coding=utf-8
import re
html=‘(html源码字符串)’;
# 将正则编译
reg = re.compile('<div class="content">(.*?)</div>’)
# findall 匹配字符串中所有的符合正则的
# result_list = reg.findall(html)
# 两种用法都可以
result_list = re.findall(reg,html)
index = 0
print(result_list)
for i in result_list:
# 循环将段子取出
print('第 %s 条段子: %s' % (index, i))
index += 1
re.sub方法
•sub 将匹配到的数据进行替换
•语法:sub(pattern, repl, string, count=0, flags=0)
参数 | 描述 |
pattern | 正则中的模式字符串。 |
repl | 替换的字符串,也可为一个函数。 |
string | 要被查找替换的原始字符串。 |
count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags | 标志位,用于控制正则表达式的匹配方式 |
# sub 将匹配中的字符串替换
ret = re.sub('h','H','hello world’)# 原来 h 被替换成了 H
>>> 'Hello world’
re.split方法
•split 根据匹配进行切割字符串,并返回一个列表
•语法:split(pattern, string, maxsplit=0, flags=0)
参数 | 描述 |
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
maxsplit | 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。 |
flags | 标志位,用于控制正则表达式的匹配方式 |
# 以,切割字符串,并且最多2次
ret = re.split(',','hello,world,hello,world',2)
ret=['hello', 'world', 'hello,world’]
贪婪模式与非贪婪模式
• Python 里数量词默认是贪婪的 , 总是尝试匹配尽可能多的字符 , 非贪婪则相反,总是尝试匹配尽可能少的字符。• 在 "*","?","+","{ m,n }" 后面加上?,使贪婪变成非贪婪 .
# 贪婪模式匹配
re.match('.*\d','a22222').group()
>>>'a22222’
# 加?号非贪婪模式
re.match('.*?\d','a11112').group()
>>>'a1’
re模块部分代码示例如下: