正则表达式入门

正则表达式是用来字符串匹配的强大工具。
本文基于python,简要的介绍总结正则表达式的引用。

一、python re 模块

在python中re模块包括了所有的正则表达式功能
re中有一个match函数,可以用于字符串匹配判断

re.match(r"123\t","123\t") #若匹配则返回一个对象,不匹配返回为空
re.search(r"\d+","python =10086")#从头到尾匹配
#findall 返回值为列表,匹配所有满足正则的字串
re.findall(r"\d+","python = 100 ,c = 200 ,c++ = 300,java =400 )

二、 r转义字符

在字符串前加上r ,则该字符串变为raw string ,即原生字符串。
raw string 中转义字符不再转义 ,例如 ’\tabc\n’ ,使用print输出的时候,现实的一个tab+abc+回车 。 但是加入r后,r‘\tabc\n’ 输出时,就仍然是‘\tabc\n’ ,反斜杠仍然是反斜杠,python解释器不进行转义。
由于正则表达式会进行转义,python解释器也会进行转义,所以一般情况下,正则表达式前都加上r字符。

作为正则表达式 ’ \ \ \ \ab’ (markdown编辑器也会转义(ˉ▽ˉ;)…
表达的应该是‘\ab’在这里插入图片描述
但是需要提醒的是,使用ipython3 进行验证的时候,若直接输入字符串变量回车,而不是print输出,输出的是raw string ,如下图在这里插入图片描述
三、 正则表达式
\d 匹配数字 \w 匹配字符(包括数字字符下划线以及汉字
\s 匹配空白字符 \b 匹配单词头或单词尾
元字符的大写和小写正好相反
{m,n} 重复m到n次
{m} 重复m次 [ ] 可选项
() 成为一个组 abc| cdf 匹配abc或者cdf
^ 匹配开头 $匹配结尾
* 匹配任意个(0个或者多个)
+ 匹配至少一个(1个或多个)
. 匹配任意字符 (\n除外)
? 匹配0个或者1个
(?p< name >) 指定组名
(?p=name) 指定特定别名的组

四、re模块高级、贪婪匹配、以及编译

  1. re.match(r" 正则表达式","匹配的字符串” )若成功匹配则返回一个Match对象,否则返回None ,该对象调用group()可返回匹配的字串
    group(0)表示原始字串,group(i) (i!=0)表示对应组的字串。
  2. re.search() 与match类似,区别是不从开头匹配 如
print(re.search(r"/d+","浏览量: 9999").group()) # '9999'
  1. re.findall() 的区别在于,匹配字符串中全部的字串,返回一个列表
print(re.findall(r"/d+","a=123,b=456,c=789")) # ['123','456','789']
  1. re.sub() 用于替换字串
ret = re.sub(r"\d+","xyz","aj=10,converse=20,vans=30")

ret 为 aj=xyz,converse=xyz,vans=xyz

sub函数第二个参数可以是一个函数,例如:

def fuc(gp):
	num = gp.group()
	addnum = int(num)
	addnum += 111
	return str(addnum)

ret = re.sub(r"\d+", fuc , "ak47 m16 98k")
print(ret) # ak158 m127 109k

贪婪匹配:
什么是贪婪匹配呢?就是在匹配字串的时候会优先尽可能多地匹配,看下面这个例子

re.match(r"\d+(0*)","1089760000").groups()

结果是[’ 1089760000 ’ , ‘ ’ ] 那么在想要提取字串后缀零的时候就遇到困难了,那怎么解决呢,怎么把贪婪匹配模式变成非贪婪匹配模式呢?

在 ’ * ’ 、’ ?’ 、’ + ’ 等后面加上? 就可以变成非贪婪字符,这样就会尽可能少得匹配字符串。

编译:
在处理正则表达式的时候,re模块会先将正则表达式进行编译,然后再用编译好的表达式进行匹配。当要使用正则的次数较多时,每次都编译会使得程序的效率低下,所以可以选择预编译。

Reg=re.compile(r"\d+")

编译后生成一个正则对象,然后就可以不用传入正则表达式调用match等方法了

五、正则表达式小应用

匹配电话号码:

phoneRegex = re.compile(r'''(
    (\d{3}|\(\d{3}\))?              # area code
    (\s|-|\.)?                      # separator
    (\d{3})                         # first 3 digits
    (\s|-|\.)                       # separator
    (\d{4})                         # last 4 digits
    )''')

匹配邮箱

r"^[\w\.]+?@[\w]+\.com$"
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值