Python正则表达式写法

一、re

1.re.match(rule,text) #必须从开头开始匹配,开头不符合就失败
2.re.search(rule,text)#从左到右遍历字符串,找到第一个符合的字符串就就返回
3.re.findall(rule,text)#在整个字符串中寻找满足条件的字符串,返回列表
4.re.sub(rule,replacetext,text)#对匹配出来的字符串人为替换,返回字符串

text='my email is 213700@gmali.com and xssheo@139.com'
rule="\s(\w+@[0-9a-z]+[.]com)"
result=re.sub(rule,'wrong',text)
print(result)

5.re.split(rule,text):按照rule分割text

text='my&email*is)213700@gmali.com and xssheo@139.com'
result=re.split('[^@\w]',text)
print(result)

6.re.compile(rule,re.VERBOSE) 编译正则表达式,能够在rule中注释

text='my email is 213700@gmail.com and xssheo@139.com'
rule="\s(\w+@[0-9a-z]+[.]com)"
# re.VERBOSE 忽略换行
r=re.compile(
    """
     \s #邮箱前的空格
     (\w+ #邮箱的第一部分
     @[0-9a-z]+ #邮箱的第二部分
     [.]com)
    """,
   re.VERBOSE
)
result=re.findall(r,text)
print(result)
二、单字符

re.match()
1.rule=‘.’ 从开头开始匹配任意字符除换行\n #注意[.]就是匹配字面意思上的. 不是原来的意思
.加上re.DOTALL可匹配所有的字符
2.rule=‘\d’ 匹配任意数字字符–>可替换为0-9
3.rule='\D’匹配任意非数字字符–>可替换为^0-9 ^代表非
4.\s 匹配空白字符,如\n \t \r(回到本行首) 空格
5.\w 匹配小写和大写的a-z、数字和下划线–>可替换为0-9a-zA-Z_
6.\W匹配除小写和大写的a-z、数字和下划线的所有字符–>可替换为^0-9a-zA-Z_ ^代表非
7.[rule or rule]中括号内的内容均可匹配

三、多字符

1.* 匹配0个或多个字符
2.+ 匹配1个或多个字符
3.?匹配0个或1个字符
4.{m} 指定匹配字符数
5.{m,n} 匹配m到n个字符,默认匹配最多
eg:rule=‘[0-9]’ or rule=‘[^0-9a-zA-Z_]+’
6.匹配所有字符 rule='[\d\D]
’ or rule=‘[\w\W]*’ or ‘.’+re.DOTALL
三个正则验证案例:

import re
'''
1.验证手机号
第一位:1
第二位:3456789
第三位-第十一位:0-9
'''
text1='13165123452'
rule1='1[3456789][\d]{9}'
result1=re.match(rule1,text1)
print('result1:'+result1.group())
'''
2.验证邮箱:xxx@yyy.com
xxx:数字、字母和下划线
@
yyy:数字、小写字母
.com
'''
text2='xsshejjo@163.com'
rule2='\w+@[0-9a-z]+[.]com'
result2=re.match(rule2,text2)
print('result2:'+result2.group())
'''
3.验证身份证号
前17位:0-9
第18位:0-9Xx
'''
text3='22370220040604898x'
rule3='\d{17}[0-9Xx]'
result3=re.match(rule3,text3)
print('result3:'+result3.group())
四、特殊字符

1.脱字号^
(1)中括号内表示取反 [^\d]+
(2)中括号外表示以指定字符打头 ^a[a-z]+
2.美元符号$ 表示以…为结尾
如邮箱验证中以com结尾,那么rule=‘[\w]+@[0-9a-z]+[.]com$’
3.竖线|
(1)中括号认为是单个字符[https|http|ftp|file]
(2)中括号认为是分割,表示或(https|http|ftp|file)

五、贪婪模式和非贪婪模式

1.贪婪模式:正则表达式中尽可能多地去匹配字符(默认是贪婪模式)
2.非贪婪模式:正则表达式最后添加?,尽可能少地去匹配字符,如[a-z]+?
一次获取多个值时一定要采用非贪婪模式,加?
五、转义字符
.相当于[.] 表示真的匹配一个.

text4='3...1415926'
rule4='\d\.+\d+'
result4=re.match(rule4,text4)
print('result4:'+result4.group())
六、group分组

通过添加()提取字符串

import re
text5='my email is 213700@gmali.com and xssheo@139.com'
rule="\s+(\w+@[0-9a-z]+\.com)\s+and\s+(\w+@[0-9a-z]+\.com)"
result5=re.search(rule,text5)
print('result5:'+result5.group(1))
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值