常用方法
- re.match 从开始匹配
- re.search 查找第一个匹配的
- re.sub 替换字符串
- re.compile 生成正则对象
- re.findall 查找所有匹配的,返回匹配的列表
- re.finditer 查找所有匹配的,返回一个迭代器
re.match
从字符串开头匹配,匹配成功返回一个匹配的对象,否则返回None。
re.match(pattern, string, flags=0)
import re
str1 = 'hello world'
res = re.match(r'\w', str1)
print(res)
我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
span() | 返回一个元组包含匹配 (开始,结束) 的位置 |
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
re.search
返回在字符串中第一个匹配成功的
re.search(pattern, string, flags=0)
import re
result = re.search(r'e', 'agehellosexworldany')
print(result)
print(result.group())
# 返回匹配成功的位置
print(result.span())
e
(2, 3)
re.sub
替换字符串中的匹配项
re.sub(pattern, repl, string, count=0, flags=0)
参数 | 说明 |
---|---|
pattern | 正则中的模式字符串。 |
repl | 替换的字符串,也可为一个函数。 |
string | 要被查找替换的原始字符串。 |
count | 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。 |
flags | 编译时用的匹配模式,数字形式。 |
import re
# 将号码里的-替换成#
print( re.sub(r'-', '#', '138-3838-3838') )
# 将-替换成空字符串
print( re.sub(r'-', '', '138-3838-3838') )
# 去点所有非数字
print( re.sub(r'\D', '', '138-3838-3838') )
138#3838#3838
13838383838
13838383838
re.compile
用于编译正则表达式,生成一个正则表达式( Pattern )对象
re.compile(pattern[, flags])
import re
# 生成正则表达式对象
regexp = re.compile(r'\D')
# 用生成的对象调用正则方法
print(regexp.sub('', '138-3838-3838'))
result = re.compile(r'\d').search(r'hell996oworld')
print(result)
print(result.span())
print(result.group())
13838383838
(4, 5)
9
findall
在字符串中找到所有匹配的子字符串,返回一个列表,没有匹配的,则返回空列表。
re.findall(string[, pos[, endpos]])
参数 | 说明 |
---|---|
string | 待匹配的字符串。 |
pos | 可选参数,指定字符串的起始位置,默认为 0。 |
endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |
import re
# 匹配所有数字
result = re.findall(r'\d+', r'helloworld1383838asd115sls')
print(result)
['1383838', '115']
re.split
按照匹配的子字符串分割字符串,返回分割的列表
re.split(pattern, string[, maxsplit=0, flags=0])
import re
# 以逗号分割,并返回列表
result = re.split(r',', '100,101,102,103,104,105')
print(result)
# 以空格分割,并返回列表
result = re.split(r'\s+', '100 102 102 103 104 105')
print(result)
['100', '101', '102', '103', '104', '105']
['100', '102', '102', '103', '104', '105']
re.finditer
在字符串中找到匹配的所有子字符串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
import re
result = re.finditer(r'\d', 'he1,sdfhasdlfaoasdafsa92')
print(result)
for item in result:
print(item)
print(item.group())
1
9
2
分组匹配
import re
# 匹配数字并分组
result = re.search(r'(?P[0-9]{2})(?P[0-9]){4}', '123456789')
print(result.group())
print(result.groupdict())
# 匹配路径下的用户名
result = re.search(r'/admin/(?P[a-z]+)', '/admin/zhangsan')
print(result.groupdict())
123456
{'g1': '12', 'g2': '6'}
{'user': 'zhangsan'}
可选标志位 flag
多个标志通过 | 来分隔
修饰符 | 说明 |
---|---|
re.I | 忽略大小写 |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.M | 多行匹配,影响 ^ 和 $ |
标志位实例
import re
html = """
hello
- 1000
- 1001
- 1002
"""
# 匹配标题
result = re.search(r'(.*?) ', html)
print(result.group())
print(result.group(1))
hello
hello
# 只匹配一行
result = re.search(r'(.*) ', html)
print(result.group())
1000
# 多行匹配
result = re.findall(r'(.*?) ', html, re.S)
print(result)
['1000', '1001', '1002']
常用正则表达式
自己去百度吧,啊哈哈~