人工智能-正则表达式

1、正则表达式概述

在实际开发过程中经常会需要查找某些复杂字符串的格式
正则表达式:记录文本规则的代码

正则表达式特点:

  1. 语法令人头疼,可读性差
  2. 通用性强,能够适用于很多编程语言

2、re模块

流程:导入re模块,match匹配数据,group提取数据

#导入re模块
import re
#match匹配数据
result = match(正则表达式,要匹配的字符串)
#group提取数据
result.group()
import re
result = re.match("it","itsma")
info = result.group() #如果没有匹配到,会报错
print(info) #输出it

3、匹配单个字符

. —匹配任意一个字符(除了\n)
\d —匹配数字0-9
\D —匹配非数字
\s — 匹配空白,空格,tab键
\S ----匹配非空白
\w ----匹配特殊字符,即a-z,A-Z,_,汉字
\W ----匹配非特殊字符

import re
result = re.match("it","itsma")
if result:
	info = result.group() #如果没有匹配到,会报错
	print(info) #输出it
else:
	print('没有匹配到')

result = re.match("it","itsma\t")#\t是指tab键

4、匹配多个字符

  • —匹配前一个字符出现0次或者无限次,可有可无
  • ----匹配前一个字符出现1次或者无限次
    ? ----匹配前一个字符出现1次或者0次
    {m} ----匹配前一个字符出现m次
    {m,n} ----匹配前一个字符出现m次到n次之间的次数

5、匹配开头和结尾

^ 字符串—匹配字符串开头
字符串$ —匹配字符串结尾
[^指定字符] —取反,指定字符串以完的其他

6、匹配分组

| ----匹配左右任意一个表达式
(ab) —括号中的是一个分组
\num —引用分组num匹配到字符串
(?P)—分组起别名
(?P=name)引用别名为name分组匹配到的字符串

需求:
在这里插入图片描述
需求1:

import re
fruit = ['apple','banana','orange','pear'] #匹配apple和pear
for value in fruit:
	result = re.match("apple|pear",value)
	if result:
		info = result.group() #如果没有匹配到,会报错
		print("这是我想吃的水果",info) #输出it
	else:
		print('这个不是我想吃的水果',value)

需求2:

import re
result = re.match("[a-zA-Z0-9]{4,20}@(163|126|qq)\.com","1345ab@qq.com")
print(result)
if result:
	info = result.group()
	print(info) #输出it
else:
	print('没匹配到')

需求3:
默认group(0)代表的是匹配的所有数据, 1:第一组的带括号的数据,2:第二组带括号的数据,

import re
result = re.match("(qq):([1-9]\d{4,11})","qq:123456")
print(result)
if result:
	info = result.group()
	print(info) #输出qq:123456

	type1 = result.group(1)
	print(type1) #输出qq

	num = result.group(2)
	print(num)  #输出123456
else:
	print('没匹配到')

需求4:
\num —引用分组num匹配到字符串,用之前要括号起来

import re
#result = re.match("<[a-zA-Z4-9]{4}>.*</[a-zA-Z4-9]{4}>","<html>hh</html>")
result = re.match("<([a-zA-Z1-6]{4})>.*</\\1>","<html>hh</html>")
print(result)
if result:
	info = result.group()
	print(info)
else:
	print('没匹配到')

需求5:
\num —引用分组num匹配到字符串,用之前要括号起来\2

import re
result = re.match("<([a-zA-Z1-6]{4})><([a-zA-Z1-6]{2})>.*</\\2></\\1>","<html><h1>www.itcast.cn</h1></html>")
print(result)
if result:
	info = result.group()
	print(info)
else:
	print('没匹配到')

需求6:
(?P)—分组起别名
(?P=name)引用别名为name分组匹配到的字符串

import re
result = re.match("<(?P<name1>[a-zA-Z1-6]{4})><(?P<name2>[a-zA-Z1-6]{2})>.*</(?P=name2)></(?P=name1)>","<html><h1>www.itcast.cn</h1></html>")
print(result)
if result:
	info = result.group()
	print(info)
else:
	print('没匹配到')

7、总结

限定符
a? —o次或者1次a
a* ----0次或者多次a
a+ ----1次以上的a
a{6} ----6次出现a
a{2,6} ----6次或者2次出现a
a{2,} ----2次及以上出现a
(ab)+ ----1次以上的ab
(ab)|(cd) — ab或者cd
元字符
\d ----数字字符
\D —非数字字符
\w —单词字符(英文、数字、下划线)
\W —非单词字符
\s —空白字符(换行符、tab)
\S —非空白字符
. —任意字符
\bword\b —\b标注字符的边界
^ — 行首
& — 行尾
<.+> —贪婪匹配
<.+?> — 懒惰匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值