方法 | 含义 |
---|---|
compile(正则表达式) | 编译正则表达式,创建正则表达式对象 |
fullmatch(正则表达式,字符串) | 让整个字符串和正则表达式进行匹配 |
match(正则表达式,字符串) | 匹配字符串开头 |
匹配对象.group() | 获取整个正则表达式匹配的结果 |
匹配对象.group(分组号) | 获取正则表达式中指定的分组匹配到的结果(分组号从1开始) |
匹配对象.span() | 获取匹配到的子串范围 |
匹配对象.string | 获取原字符串 |
search(正则表达式,字符串) | 在字符串中查找第一个能和正则表达式匹配的子串。如果找到了返回匹配对象,找不到返回None |
findall(正则表达式,字符串) | 获取字符串中所有满足正则表达式的子串。返回一个列表,列表中的元素是字符串 |
finditer(正则表达式,字符串) | 获取字符串中所有满足正则表达式的子串。返回一个迭代器,迭代器中的元素是匹配对象 |
split(正则表达式, 字符串, 次数) | 指定切割次数 |
sub(正则表达式, 字符串1, 字符串2, 次数) | 限制替换次数 |
1、compile(正则表达式) - 编译正则表达式,创建正则表达式对象
from re import compile, fullmatch, match, search, findall, finditer, split, sub
from re import IGNORECASE, MULTILINE, DOTALL, S
# 1. re.compile()
re_obj = compile(r'\d{3}')
fullmatch(r'\d{3}', '234')
re_obj.fullmatch('234')
search(r'\d{3}', 'hu23hjk890jhkh78')
re_obj.search('hu23hjk890jhkh78')
2.匹配
- 1)fullmatch(正则表达式, 字符串) - 让整个字符串和正则表达式进行匹配
- 2)match(正则表达式, 字符串) - 匹配字符串开头
如果匹配不到结果是None,如果匹配成功了结果是匹配对象 - 3)(?i) - 正则表达式前面加(?i)表示忽略大小写
- 4)(?s)-正则表达式前面加(?s)表示单行匹配
- 5)(?is)-单行匹配并忽略大小写
re_str = r'\d{3}'
print(fullmatch(re_str, '732'))
print(fullmatch(re_str, '732hjas')) # None
print(match(re_str, '789'))
print(match(re_str, '789j手机打开'))
# 设置同时忽略大小写和单行匹配
print(fullmatch(r'123.[a-z]{3}', '123\nHNA', flags=S|IGNORECASE))
print(fullmatch(r'(?is)123.[a-z]{3}', '123\nHNA'))
3.匹配对象
- 1)匹配对象.group() - 获取整个正则表达式匹配到结果
- 2)匹配对象.group(分组号) - 获取正则表达式中指定的分组匹配到的结果(分组号从1开始)
- 3)匹配对象.span() - 获取匹配到的子串的范围
- 4)匹配对象.string - 获取原字符串
result = match(re_str, '789j手机打开')
re_str = r'(\d{2})-([a-z]{3})'
result = match(re_str, '23-sjm回款及时发货')
print(result)
# 1)获取匹配到的字符串
# 匹配对象.group() - 获取整个正则表达式匹配到结果
print(result.group()) # 23-sjm
# 匹配对象.group(分组号) - 获取正则表达式中指定的分组匹配到的结果(分组号从1开始)
print(result.group(1)) # 23
print(result.group(2)) # sjm
# 2)获取匹配到的子串的范围
# 匹配对象.span()
print(result.span()) # (0, 6)
print(result.span(2)) # (3, 6)
# 3)获取原字符串
# 匹配对象.string
print(result.string)
4.查找
- 1)search(正则表达式,字符串) - 在字符串中查找第一个能和正则表达式匹配的子串。如果找到了返回匹配对象,找不到返回None
- 2)findall(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串。返回一个列表,列表中的元素是字符串
- 3)finditer(正则表达式,字符串) - 获取字符串中所有满足正则表达式的子串。返回一个迭代器,迭代器中的元素是匹配对象
str1 = 'and123=hu123aaa456klk98!ll7hu123oop'
result = search(r'\d+', str1)
print(result) #
result = findall(r'\d+', str1)
print(result) # ['123', '123', '456', '98', '7', '123']
result = findall(r'\d+[a-z]', str1)
print(result) # ['123a', '456k', '7h', '123o']
# findall正则中如果有分组,只获取分组匹配到的内容
result = findall(r'(\d+)[a-z]', str1)
print(result) # ['123', '456', '7', '123']
result = findall(r'(\d+)([a-z])', str1)
print(result) # [('123', 'a'), ('456', 'k'), ('7', 'h'), ('123', 'o')]
str2 = '9h3jabc===9k2mabc9293h0oabc==!!!'
result = findall(r'(\d[a-zA-Z]){2}abc', str2)
print(result)
result = finditer(r'((\d[a-zA-Z]){2})abc', str2)
# print(list(result))
for x in result:
print(x.group(1))
5.切割
split(正则表达式, 字符串) - 将字符串中能和正则表达式匹配的子串作为切割点,对字符串进行切割。返回值是列表,列表中的元素是字符串
split(正则表达式, 字符串, 次数) - 指定切割次数
str1 = 'and123=hu123aaa456klk98!ll7hu123oop'
result = split(r'\d+', str1)
print(result) # ['and', '=hu', 'aaa', 'klk', '!ll', 'hu', 'oop']
result = split(r'\d+', str1, 3)
print(result) # ['and', '=hu', 'aaa', 'klk98!ll7hu123oop']
6.替换
- sub(正则表达式, 字符串1, 字符串2) - 将字符串2中能和正则表达式匹配的子串全部替换成字符串1
- sub(正则表达式, 字符串1, 字符串2, 次数) - 限制替换次数
str1 = 'and123=hu123aaa456klk98!ll7hu123oop'
new_str1 = sub(r'\d+', '+', str1)
print(new_str1)
sentence = '你丫是傻 叉吗? 我操你大爷的. F u c k you.'
re_str = r'(?i)[操肏艹草曹]|f\s*u\s*c\s*k|s\s*h\s*i\s*t|傻\s*[比屄逼叉缺吊屌]|煞\s*笔'
new_sentence = sub(re_str, '*', sentence)
print(new_sentence)