加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-14 06:15:26 所属栏目:百科 来源:网络整理
导读:正则表达式: 正则表达式在线测试网址:https://0x9.me/dGRPQ 正则表达式手册:https://0x9.me/wvkrD 正则表达式常用场景: 1.判断某一个字符串是否符合规则? ? 例(注册网页? 判断手机号,身份证是否合法) 2.将符合规则的内容从一个庞大的字符串体系当中提

正则表达式:

  正则表达式在线测试网址:https://0x9.me/dGRPQ

  正则表达式手册:https://0x9.me/wvkrD

正则表达式常用场景:

  1.判断某一个字符串是否符合规则? ? 例(注册网页? 判断手机号,身份证是否合法)

  2.将符合规则的内容从一个庞大的字符串体系当中提取出来。 例(爬虫,日志分析)

什么是正则表达式: 只和字符串打交道

  是一种规则,用来约束字符串的规则

字符含义:

# w W
# print(re.findall("w","fsjdk1A")) #[‘f‘,‘s‘,‘j‘,‘d‘,‘k‘,‘1‘,‘A‘]
# print(re.findall(‘W‘,‘hello egon 123‘)) #[‘ ‘,‘ ‘]
#s  S
# print(re.findall(‘s‘,‘hello  egon  123‘)) #s表示所有的空格换行和tab键
# print(re.findall(‘S‘,‘hell*o  egon  123‘))  #S非空格
#A与^  Z与$   一样
# print(re.findall(‘Ahe‘,‘hello egon 123‘)) #[‘he‘],A==>^
# print(re.findall(‘123Z‘,Z==>$
# print(re.findall(‘^h‘,‘hello egon 123‘)) #[‘h‘]
# print(re.findall(‘3$‘,‘hello egon 123‘)) #[‘3‘]
# #b
# l1 = "sing 1studings tuding1 swimming"
# ret = re.findall(r"b[a-zA-Z]*ing[a-zA-Z]*b",l1)
# print(ret)      #[‘sing‘,‘studings‘,‘tuding‘,‘swimming‘]

#重复匹配
#.  除了换行符之外的任意字符
# print(re.findall("a.b","fsavbfsjajbfa b"))  #[‘avb‘,‘ajb‘,‘a#b‘]
# 9、1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
# 1)从上面算式中匹配出最内层小括号以及小括号内的表达式
# import re
# l1 = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
# print(re.findall(r‘([^()]+)‘,l1))

?

量词:

^以什么开头? ? $以什么结尾

运用

#第一题:1、匹配整数或者小数(包括正数和负数)
# import re
# def func(str1):
#     ret = re.findall("-?d+(?:.d+)?",str1)
#     return ret
# print(func("afdkj123.21afkj-23fafs53.324"))
#第二题:
#2、匹配年月日日期 格式2018-12-06
# import re
# ret =re.findall("d{4}-[1]?d-[1-3]?d","2018-05-6")
# print(ret)
#第三题:
#3、匹配qq号
# import re
# ret = re.findall("[1-9]d{4,10}","54654444")
# print(ret)
#第四题:
# 4、11位的电话号码
# import re
# ret = re.findall("^[1][3-8]d{9}$","18323978615")
# print(ret)
#第五题:
# 5、长度为8-10位的用户密码 : 包含数字字母下划线
# import re
# ret = re.findall("(?:d|[a-zA-Z]|_){8,"aAk123_5fs")
#
# ret = re.findall("w{8,"asflj123lk")
# print(ret)
#第六题:
# 6、匹配验证码:4位数字字母组成的
# import re
# ret = re.findall("(?:d|[a-zA-Z]){4}","afhz")
# print(ret)
#第七题:
# 7、匹配邮箱地址
# import re
# ret = re.findall("^[a-zA-Z]w{4,16}(?:d|[a-zA-Z])@(?:163|126|yeah).com$","[email?protected]")
# print(ret)
#第八题:
# 8、从类似
# <a>wahaha</a>
# <b>banana</b>
# <h1>qqxing</h1>
# 这样的字符串中,
# 1)匹配出wahaha,banana,qqxing内容。
# 2)匹配出a,b,h1这样的内容
# import re
# ret = re.search("<(w+)>([a-zA-Z]+)</(w+)>","<asf>asfkj</asfd>")
# #第一问
# l1 = ret.group(2)
# print(l1)
# #第二问
# l2 = ret.group(1)
# print(l2)
#第九题
# 9、1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
# 1)从上面算式中匹配出最内层小括号以及小括号内的表达式
# import re
# l1 = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
# print(re.findall(r‘([^()]+)‘,l1))

# #第十题:
# 10、从类似9-2*5/3+7/3*99/4*2998+10*568/14的表达式中匹配出从左到右第一个乘法或除法
import re
# str1 = "9-2*5/3+7/3*99/4*2998+10*568/14"
# l1 = re.search("d+(.d)?(?:*|/)d+(.d)?","9-2*5/3+7/3*99/4*2998+10*568/14")
# print(l1.group())

贪婪匹配:正则会尽量的帮我们匹配

  默认贪婪,回溯算法

非贪婪匹配:会尽量少为我们匹配

  量词? 表示非贪婪,惰性匹配

  .*?x? 表示匹配任意长度的字符遇到x就停止

*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

re 模块下的常用方法

import re

ret = re.findall(a,eva egon yuan)  # 返回所有满足匹配条件的结果,放在列表里
print(ret) #结果 : [‘a‘,‘a‘]

ret = re.search(a,eva egon yuan).group()
print(ret) #结果 : ‘a‘
# 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

ret = re.match(a,abc).group()  # 同search,不过尽在字符串开始处进行匹配
print(ret)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读