python3正则表达式使用说明

常用方法

  • 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']

    常用正则表达式

    自己去百度吧,啊哈哈~

    你可能感兴趣的:(python3正则表达式使用说明)