简介: 在python中,可以使用正则表达式对一些字符进行处理 先看理论下面有用法
目录
理论:
一、元字符
二、限定符
三、字符类
四、排除字符
五、选择字符
六、转义字符
七、分组
操作
一、匹配字符串
1、使用 match()方法匹配
常用标志
2、使用findall()方法进行匹配
3、sub()替换字符
4、使用正则表达式分割字符串
理论:
一、元字符
常用元字符及说明
| 元字符 | 说明 | 元字符 | 说明 |
| . | 匹配除换行以外的任意字符 | b | 匹配单词的开始或结束 |
| w | 匹配字母或数字或下划线或汉字 | ^ | 匹配字符串开头 |
| s | 匹配任意的空白符 | $ | 匹配字符串结尾 |
| d | 匹配数字 |
# 举例 bgaow*b
解析:
匹配以字母gao开头的单词,先匹配单词开始处(b),然后匹配字母gao,接着匹配任意数量的数字或字母(w*),最后匹配单词结束处(b)
该表达式 可以匹配如“gao123”、“gaoqwe”等
二、限定符
常用限定符以及对应的说明和举例
| 限定符 | 说明 | 举例 |
| ? | 匹配前面的字符零次或一次 | colou?r # 该表达式可以匹配clour和color |
| + | 匹配前面的字符一次或多次 | go+gle # 该表达式可以匹配的范围从gogle到goo....gle |
| * | 匹配前面的字符零次或多次 | go*gle # 该表达式可以匹配从go...gle |
| {n} | 匹配前面的字符n次 | go{2}gle # 该表达式只匹配google |
| {n,} | 匹配前面的字符最少n次 | go{2,}gle # 该表达式可以匹配goo...gle或google |
| {n,m} | 匹配前面的字符最少n次,最多m次 | employe{0,2} # 该表达式可以匹配 employ 、employe、employee |
三、字符类
如果要匹配没有预定义元字符的集合(如元音字母 a、e、i、o),那么只需要在括号里列出它们即可,例如[aeio]匹配任何一个英文元音字母,而 [.?!] 表示匹配标点符号“.” “?” “!”,也可以指定范围例如[0-9]代表的含义与d一致
四、排除字符
正则表达式中"^" 表示行的开始,但是加入到方括号中就是排除的意思
# 例如 [^a-zA-Z] # 表示匹配一个非字母的字符
五、选择字符
例如 匹配身份证号码 (身份证号码规则: 身份证号码长度为18位,前17位为数字后一位是校验位,该校验位可能为 X或x, 这里可以用 “|”(或) 来实现
(^d{18}$)|(^d{17})(d|X|x)$
上述表达式为: 可以匹配18位或17位数字和最后一位X或者x
六、转义字符
正则表达式中转义字符为“” 反斜杠
# 例如
#匹配ip地址的写法
[1-9]{1,3}.[0-9]{1.3}.........等
七、分组
小括号 分组 也叫 子表达式
# 举例 (thir|four)th
上述表示 匹配单词 thirth 或 fourth
操作
使用re模块来实现表达式的操作
简介:
re模块用于实现正则表达式的操作,在实现是可以使用re模块提供的方法(如 search match findall等)进行字符串处理,可以使用compile方法将模式字符串转换为正则表达式对象,再使用该表达式相关方法操作
一、匹配字符串
匹配字符串 用re模块下的 match、search、findall等方法
1、使用 match()方法匹配
match方法用于字符串开始处进行匹配,如果在起始位置匹配成功,返回Match对象,否则返回None
语法格式:
re.match(pattern,string,[flages])
# 参数说明
pattern: 表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式,如 是否区分字母大小写(参数请查看“常用标志”一栏目录)
常用标志
| 标志 | 说明 |
| A或ASCII | 对于w,W,b,B,d,D,s,S只进行ASCII匹配(使用3.x) |
| I或IGNORECASE | 执行不区分字母大小写匹配 |
| M或MULTILINE | 将^和$用于包括整个字符串的开始和结尾的每一行(默认情况下,仅适合用于字符串的开始和结尾处) |
| S或DOTALL | 使用“.”字符匹配所有字符,包括换行符 |
| X或VERBOSE | 忽略模式字符串中未转义的空格和注释 |
#举例: 可以将字符串中匹配的结果拿出来
import re
# 匹配例子
pattern = r'This_w+' # 模式字符串 w : 匹配字母或数字或下划线或汉字 "+" 代表 匹配前面的字符一次或多次
string = 'This_is_my_dog THIS_IS_MY_DOG' # 要匹配的字符
match = re.match(pattern, string, re.I) # 匹配字符串不区分大小写 注意 I 大写
print(f"直接输出结果:{match}") # 输出
print(f'匹配值的起始位置:{match.start()}')
print(f'匹配结束位置:{match.end()}')
print(f'匹配位置的元组:{match.span()}')
print(f'要匹配的字符串:{match.string}')
print(f'匹配的数据:{match.group()}')
# 不匹配例子 不到的结果返回为None
strings = 'haha THIS_IS_MY_DOG'
matchs = re.match(pattern, strings, re.I) # 与上面同理
print(f"不匹配的结果:{matchs}")
运行结果:
# 解析:
re.match方法从字符串开始位置匹配,当第一个字母不符合条件时,不在匹配,直接返回None
当re.natch方法匹配到后悔显示匹配字符的下标位置以及匹配内容,注意 这里只能返回第一个匹配到的值,第二个不会返回
# 注意 : re.search 可以匹配字符串中任意一个地方的关键词 与 match的区别在于 match值匹配开头的第一个,而search可以匹配任意位置
格式:
re.search(pattern,string,[flages])
参数说明:
pattern: 表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式,如 是否区分字母大小写
# 举例
import re
string = r'(黑客)|(抓包)|(偷)|(盗)|(监听)' # 模式字符串 匹配其中内容 “|”代表或
strings = "我想学习关于黑客方面的知识,并查阅黑客的书籍!"
match = re.search(string, strings) # re.search 可以匹配字符串中任意一个地方的关键词
print(match)
if match == None:
print(f"{strings} #安全!")
else:
print(f"{strings} #有危险词汇!")
# 运行结果:
2、使用findall()方法进行匹配
findall()方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。如果匹配成功,则返回匹配结构的列表,否则返回空列表
格式:
re.findall(pattern,string,[flages])
参数说明:
pattern: 表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flags:可选参数,表示标志位,用于控制匹配方式,如 是否区分字母大小写(参数请查看“常用标志”一栏目录)
import re # 匹配例子 pattern = r'This_w+' # 模式字符串 w : 匹配字母或数字或下划线或汉字 "+" 代表 匹配前面的字符一次或多次 string = 'This_is_my_dog THIS_IS_MY_DOG' # 要匹配的字符 match = re.findall(pattern, string, re.I) # 匹配字符串不区分大小写 注意 I 大写 print(match)
# 运行结果:
3、sub()替换字符
sub 方法用于实现字符串的替换
格式:
re.sub(pattern,repl,string,count,flags)
# 参数说明
pattern: 表示模式字符串,由要匹配的正则表达式转换而来。
repl: 表示替换得字符串。
string: 表示要被查找替换的原始字符。
count:可选参数,表示模式匹配后替换的最大次数,默认为0次,表示替换所有的匹配内容。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写(参数请查看“常用标志”一栏目录)
举例:
import re string = r'(黑客)|(抓包)|(偷)|(盗)|(监听)' # 模式字符串 匹配其中内容 “|”代表或 strings = "我想学习关于黑客方面的知识,并查阅黑客的书籍!" match = re.sub(string,'(违规言语!)', strings) # re.search 可以匹配字符串中任意一个地方的关键词 print(match)
运行结果:
4、使用正则表达式分割字符串
spli 方法用于实现根据正则表达式切割字符,并以列表的形式返回。
格式:
re.split(pattern,string,[maxsplit],[flags])
参数说明
pattern:表示模式字符串,由要匹配的正则表达式转换而来。
string: 表示要匹配的字符
maxsplit: 可选参数,表示最大的拆分次数。
可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写(参数请查看“常用标志”一栏目录)
举例:
截出一个正确的网址
import re pattern = r'[?]' # 定义分隔符 url = "https://www.bdqn.vip/?cat=7" result = re.split(pattern, url) # 分割字符串 print(result)
运行结果:



