python-正则

python-正则

一、match、search与findall

  • match 只要从开头进行匹配,如果匹配不成功则就返回None
  • search 进行正则字符串匹配方法,匹配的是整个字符串。只要有匹配的后面就不会继续进行检索,找到一个匹配的就会停止。
  • findall 匹配整个字符串,找到一个继续向下找一直到字符串结尾

result.span() ----> 返回位置
使用group提取到匹配的内容

二、用法1

result = re.findall('[a-z][0-9][a-z]',msg)
表示在msg中找到类似于‘a9g’这样前后都是字母中间是数字的字符

result = re.findall('[a-z][0-9]+[a-z]',msg)+’放在[0-9]之后,表示可以出现1个及以上的数字

result = re.findall('[a-z][0-9]{n}',msg)
表示后面一共出现n个数字

result = re.findall('^[a-z][0-9][a-z]$',msg)
开头加‘^’表示从字符串msg的开头进行匹配,结尾加‘$’表示匹配到字符串msg的结尾为止。

result = re.findall('[a-z][0-9]{m,n}',msg)
表示后面出现的数字个数大于等于m小于等于n
  1. ‘*’用于将前面的模式匹配0次或多次(贪婪模式,几尽可能多的匹配)----> >=0
  2. ‘+’用于将前面的模式匹配1次或多次(贪婪模式)----> >=1
  3. ‘?’用于将前面的模式匹配0次或1次(贪婪模式) ----> 0,1
  4. ‘{m}’用于验证将前面的模式匹配m次
  5. ‘{m,}’用于验证将前面的模式匹配m次或者多余m次 ----> >=m
  6. ‘{m,n}’用于验证将前面的模式匹配大于等于m次并且小于等于n次(贪婪模式)
  7. ‘*?’‘+?’‘??’即上面三种特殊字符的非贪婪模式(尽可能少的匹配)
  8. ‘{m,n}?’即上面的非贪婪版本

三、用法2

  • \A:表示从字符串的开始处匹配。
  • \Z:表示从字符串的结束处匹配,如果存在换行,只匹配到换行前的结束字符串。
  • \b:匹配一个边界单词,也就是指单词和空格间的位置。例如,‘py\b’可以匹配‘python’中的‘py’,但不能匹配‘openpyx1’中的‘py’。
  • \B:匹配非单词边界。‘py\B’可以匹配‘openpyx1’中的‘py’,但不能匹配‘python’中的‘py’。
  • \d:匹配任意数字,等价于[0-9]。
  • \D:匹配任意非数字字符。等价于[^\d]。
  • \s:匹配任意空白字符,等价于[\t\n\r\f]。
  • \S:匹配任意非空白字符,等价于[^\s]。
  • \w:匹配任意字母数字及下划线,等价于[a-zA-Z0-9]。
  • \W:匹配任意非字母数字及下划线,等价于[^\w]。
  • \:匹配原义的反斜杠\。

注意:

  • . 任意字符除(\n)
  • ^ 开头
  • $ 结尾
  • [] 范围
  • () 一组

比较:()与[]

  • (word1|word2|word3) word1或者word2或者word3
  • [word] w或者o或者r或者d四个字母

四、分组

() ----> result.group(1) 获取组中的内容
在分组的时候还可以结合‘|’

result = re.match(r'(\d{3}|\d{4})-(\d){8})$',phone)
print(result)

比较:

  1. 不需要引用分组的内容:
msg = '<html><hl>abc<hl><html>'
result = re.match(r'<[0-9a-zA-Z]+>(.+)<[/0-9a-zA-Z]>',msg)
print(result)
  1. 引用分组匹配内容:

法一: number:\number 引用第number组的数据

msg = '<html><hl>abc<hl><html>'
result = re.match(r'<[0-9a-zA-Z]+><[0-9a-zA-Z]+>(.+)</\2></\1>$',msg)
print(result)

法二:?P<名字>

msg = '<html><hl>abc<hl><html>'
result = re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)(.+)</(?P=name2)></(?P=name1)>',msg)
print(result)
print(result.group(1))

五、其他

  1. sub(正则表达式,‘新内容’,string)
result = re.sub(r'\d+','90','java:99,python:95')
----> 替换
  1. split()
result = re.split(r'[,:]','java:99,python:95') 
----> 在字符串中搜索,如果遇到‘:’或者‘,’就分割,将分割的内容都保存到列表中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值