神奇的正则表达式

  • 正则表达式是由普通字符(例如字符a 到z)以及特殊字符(称为"元字符")组成的文字模式。 模式描述在搜索文本时要匹配的一个或多个字符串。 正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配

  • 匹配单个字符

字符功能
.匹配任意一个字符(除了“\n”)
[]匹配列表[]给出的字符
\d匹配数字一个,即0-9
\D匹配非数字
\s匹配空格,\t-tab键 \n-换⾏
\S匹配非空格
\w匹配字符匹配单词字符,即a-z、A-Z、0-9、_
\W匹配⾮单词字符
  • 匹配多字符串
字符功能
*匹配前一个字符出现0次或是无限次,即可有可无
+匹配前一个字符串出现1次或是无限次,即至少有1次
匹配前一个字符串出现1次或者0词,要么1次,要么没有
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现从m到n次
  • 匹配分组“|”
字符功能
|匹配左右任意一个表达式
(ab)将括号中
\num引用分组num匹配到的一个分组
(?P)分组起别名
(?P=name)应用别名为name分组匹配到字符串
  • 这里() 跟\num 是连用的,()用做分作分组,\num 大概是调用分组的索引,的内容,可以理解为分组减少重复(意淫一下:如果分组很复杂,用这个方法估计你得疯了)
  • 所一用(?P)分组起别名,之后再需要用时候(?P = name)这方法就人性了很多

re模块操作

    • re.match(patten,string,flags=0)
    • pattern:正则模型
    • string:要匹配的字符串
    • falgs:匹配模式
  • match() 方法一旦匹配成功,就是一个对象,对象有一下方法:
    group() 返回被 RE 匹配的字符串
    start() 返回匹配开始的位置
    end() 返回匹配结束的位置
    span() 返回⼀个元组包含匹配 (开始,结束) 的位置

import re 
result = re.match(正则表达式,要匹配的字符串)
result.group()

举例子1:需求:匹配出163、126、11邮箱

import re 

ret = re.match("\w{4,20}@163|126|qq\.com","test@163.com")
print(ret.group())

if ret:
	print(ret.group())
else:
	print("不是163、126、qq邮箱")	

需求:匹配出hh

import re
ret = re.match("<[A-Za-z]*>/w*<[A-Za-z]>","<html>hh</html>")
print(ret.group())

需求:匹配出 <html><h1>www.itcast.cn</h1></html>

import re 
labels = [<html><h1>www.itcast.cn</h1></html>,<html><h2>www.itcast.cn</h2></html>]

for label in labels:
	ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>")
	if ret :
		print("%s 就是符合要求的标签" % ret.group())
	else:
		print("%s 不符合要求" % label)

示例:(?P<name>) (?P=name)
需求:匹配出<html><h1>www.itcast.cn</h1></html>

import re
ret = re.match(r"<(?p<name1>\w*)><(?P<name2>/w*)>.*<(?P=name2)><(?P=name1)>","<html><h1>www.itcast.cn</h1></html>")
ret.group()

re 模块的高级用法

  • search
    函数会在字符串内查找模式匹配,只要找到第⼀个匹配然后返回,如果字符串没有匹配,则返 回None。
    格式:re.search(pattern, string, flags=0)
    • match()和search()的区别:
      math()函数只检测RE是不是在string的开始位置匹配,search() 会扫描整个string查找匹配也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none
  • sub
    使用re替换string中每一个匹配的子串后返回替换后的字符串。
    格式:re.sub((pattern, repl, string, count)
import re ret = re.sub(r"\d+", "10000", "阅读次数:9999,转发次数:88)

# 运行结果
阅读次数:10000,转发次数:10000,评论次数:10000
repl 这个替换的内容可以用函数写
  • split
    按照能够匹配的⼦串将string分割后返回列表。 可以使⽤re.split来分割字符串,如:re.split(r’\s+’, text);将字符串按空格分割成⼀个单词列表。 格式:re.split(pattern, string[, maxsplit])
  • findall
    re.findall遍历匹配,可以获取字符中所有匹配的字符串,返回一个列表。
    格式:re.findall(patten,string,flags=0)

python贪婪和非贪婪

  • python是贪婪的
  • 正则表达式体现在多匹配多个字符也就是“*,+”这匹配会出现贪婪,会找到匹配最多的

r的作用

  • Python中在正则字符串前⾯加上 ‘r‘ 表示, 让正则中的 ‘’ 不再具有转义功能(默认为转义),就是表示原⽣字含义⼀个斜杠 \
  • 说个简单的话就是前面挂个r我们就可以正常写我们的正则表达式了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值