【前沿查看】

.匹配任意字符,除了换行符
^匹配字符串开始的位置
$匹配字符串结束的位置,当出现多组符合的匹配时,返回字符串最后的那组匹配
*匹配 0,1,n 次前面的原子【贪婪模式:尽可能多的匹配】
?匹配 0,1 次前面的原子【懒惰模式:精确匹配】
+匹配 1,n 次前面的原子
\w+匹配字母数字及下划线
\d+匹配任意数字,等价于 [0-9]
[a-z]+匹配任何小写字母
[^a-z]+匹配除了小写字母的其他字符
{ j }前面的原子出现 j 次
{ j , }前面的原子至少出现 j 次
{ j , k }前面的原子至少出现 j 次,至多出现 k 次
i | j匹配 i 或 j ,若 i 与 j 同时出现,匹配 i
( )组,限制这组数据的组合如()内所描述一样,只返回符合括号内描述的内容

一、导入re库

import re

二、通配符基本用法

(1)通配符匹配

txt = '请找出小猫吧,找出小猫吧,出小猫吧'cat = re.findall('出(.*?)吧',txt)print(cat) # ['小猫', '小猫', '小猫']print(cat[0])# 小猫

(2)多条件通配符匹配

txt = '请找出小猫吧,找出小猫好吗,出小猫啦'cat = re.findall('出(.*?)[吧|好|啦]',txt)print(cat)# ['小猫', '小猫', '小猫']

(3)通配符标记匹配

txt = '请找出小猫1,\n利用这个标记①,不要找出小猫2,'cat = re.findall("出(.*?),.*?①",txt.replace("\n",""))[0] # .* 无法匹配换行符,固要将换行符替换掉再匹配(或者字符串前加r转义掉)print(cat)# 小猫1

三、匹配数字

(1)匹配字符串所有数字

txt = "{'k':123,'k':12345,'k':1234567}"num = re.findall('\d+',txt)print(num)# ['123', '12345', '1234567']

(2)只匹配5位的数字

txt = "{'k':123,'k':12345,'k':1234567}"num = re.findall(r'\b\d{5}\b',txt)[0]print(num)# 12345

(3)匹配5~7位的数字

txt = "{'k':123,'k':12345,'k':1234567}"num = re.findall(r'\b\d{5,7}\b',txt)print(num) # ['12345', '1234567']

四、英文匹配

(1)匹配英文、数字、下划线(_)

txt = "{'k':123,'k':12345,'k_':1234567}"word = re.findall('\w+',txt)print(word)# ['k', '123', 'k', '12345', 'k_', '1234567']

(2)匹配全英文字母

txt = "{'A':123,'b':12345,'cc':1234567}"word = re.findall('[a-zA-Z]+',txt)print(word)# ['A', 'b', 'cc']

(3)匹配数字+英文小大写

txt = "{'A':123,'b':12345,'c':1234567}"word = re.findall('[0-9a-zA-Z]+',txt)print(word)# ['A', '123', 'b', '12345', 'c', '1234567']

(4)匹配数字+英文的32位秘钥

key = re.findall('\b[0-9a-zA-Z]{32}\b',txt)

五、中文匹配

(1)匹配中文

txt = "你好,世界,hello world,123"num = re.findall('[\u4e00-\u9fa5]+',txt)print(num)# ['你好', '世界']

六、匹配非、特殊字符(前加^)

(1)匹配非数字

txt = "abc123一二三"word = re.findall('[^0-9]+',txt)print(word)# ['abc', '一二三']

(2)非法文件名替换

file_name = '文件//:\|名.xlsx'file_name = re.sub(r'[\\/:*?"|]','',file_name)print(file_name)# 文件名.xlsx