正则表达式

在线测试

常用的正则表达式

方案 代码
年份表达 ^((19|20)\d{2})$
手机号码 ^1[3456789]\d{9}$
E-mail地址 ^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$
网址URL http: //(/[\w-]+.)+[\w-]+(/[\w-./?%&=])

正则表达式用于解决字符串,重在处理规则

一些逻辑分组

image

字符分类

普通字符

import re
re.findall("p","python")		#['p']
re.findall("python","I like python")	#['python']
re.findall("p","I love python")		#['o''o']

预定义字符

字符 含义 字符 含义
\d 所有的数字 \D 所有的数字
\w 包含下划线的字符 \W 下划线与字符
?? 除下划线的特殊字符 ?? 除下划线的特殊字符
\s 空白符 ,制表符\t,换行符\n \S 格式字符

元字符

[]匹配一个字符,括号内为的关系,如[123]或者[1-3]表示为1或者2或者3的字符

一些功能性符号

  • ^在与预定义字符和元字符一起使用时为取反,也就是说\s=^\S
  • -代表区间
  • ()表示分组,括号外的参与搜索但是不参与输出
  • {}重复匹配:{3}重复3次,{n,m}重复n-m次,可以留空
  • {}?在与预定义字符和元字符一起使用时表示非贪婪匹配(默认是贪婪匹配),如{n,m}?基本上等价于{n}
  • ?表示前面的字符出现0次或1次
  • +表示前面的字符出现至少一次
  • *表示前面的字符出现0次或任意次
  • r"……"转义符\
  • .表示非换行符的一切字符

反向引用

wordstr=""" 'hello' "python" 'love" 'haha" """
result = re.findall(r"['/"]\w+["/']",worldstr)	#无法选出引号正确的词组
result = re.findall(r"('|\")(\w+)(\1)",worldstr)	#能够选出引号正确的词组
print([x[1] for x in result])

例子,寻找包含3个相同连续数字

result = re.findall(r"(\d)\1{2,}","122223")
print([x[0]+x[1] for x in result])

位置匹配

^表示从开头$表示到结尾

python相关函数

findall

以列表的方式返回全部匹配结果

match

从头开始匹配,匹配成功就返回

字符串内查找,找到匹配就返回

split分割

print("1 2 3 4".split(" "))
split_list = re.split(r"[\+\-\*\/]","1+2*3/4-40")#利用计算符号对算式进行分割

sub replace

myLine = "i am snipper, i like swimming"
re.sub(r'i','I',myLine,3)#用I替换I,最多替换3次

分组group

findall的使用方法见上面

result = re.match(r'h(.*)(\d{3})',hfadfadf2323adf223)
#正常输出
print(result.group())	#hfadfadf2323adf223
print(result.group(0))	#hfadfadf2323adf223
#输出第一个括号
print(result.group(1))	#fadfadf2323adf
#输出第二个括号
print(result.group(2))	#223
# ????为啥没有h了???

听课进度:1h30min

posted @ 2021-04-26 16:14  小康要好好学习  阅读(264)  评论(0编辑  收藏  举报