python中的正则表达式的运用

1.字符集

  • 匹配到一个字符
[abc]  : 匹配a/b/c中的任一字符
[a-z]  : 匹配a-z之间的任一字符
[^b-z] : 匹配非b-z之间的任一字符

2.概括字符集 

  • 匹配到一个字符
\d  : 数字(匹配到一个元素)
\D  : 非数字
\w  : 字母
\W  : 非字母
\s  :不可见字符(空格、制表符\t、垂直制表符\v、回车符\r、换行符\n、换页符\f)
\S  : 不是不可见字符


import re

target = '点赞数:12'
result = re.findall('\d', target) # 这一行中的\d表示只要该位置上的字符是数字,就匹配成功,返回结果,一次只表示一个字符
print(result)


》['1','2']

3.量词

  • findall("匹配规则",需匹配的字符串),全部搜索,返回搜索到的所有字符串。
  • match() : 若子字符串头部首个的元素不匹配,则返回None,只有头部的第一个元素匹配时,才继续匹配并返回第一个匹配的字符串的re.Match对象,匹配的结果用.group()方法查看。
  • search(): 从头匹配,匹配到第一个符合re的值之后返回re.Match对象,并不继续匹配下去,匹配的结果用.group()方法查看。
  • 常用findall() 或 search()方法。
{3}   : 前面的字符出现三次
{3,8} : 前面的字符出现3-8次
?    : 前面的字符出现0/1次  (非贪婪)
+     :前面的字符出现1/无限次 (贪婪)
*     :前面的字符出现0/无限次


import re

content = '点赞数:12'
result = re.findall('\d{1,10}', content)# 这一行中的\d表示一个数字字符,{1,10}表示这个\d出现1‐10次都匹配成功,只要点赞数在0‐9999999999之间都可以匹配出来。
# 同样也可以这样写:
result = re.findall('\d+', content)
print(result)

》['12']

 4.锚字符

  • .        :  匹配除换行符外的所有符号
  • .*       :  匹配任意多个除换行符外的所有符号
^  : 以...字符开头
$  : 以...字符结尾

5.组

  • 返回()内匹配的字符。
(\d+)  : 返回()内匹配成功的字符。


1.加括号
import re
content = '发布于2020/12/23'
result = re.findall('.*?(\d.*\d)', content) # 这一行的.*表示匹配除换行符外的任意多个字符,?表示非贪婪匹配
# (\d.*\d)表示一个组,以数字开头,以数字结尾,.*表示中间可以是除换行符以外的任意多个字符
# 最终返回的结果就是括号内匹配到的结果。
print(result)

》['2020/12/23']



2.不加括号
import re
content = '发布于2020/12/23'
result = re.findall('.*?\d.*\d', content)
print(result)

》['发布于2020/12/23']

6.re.sub('待匹配字符串', '待替换字符串',content) 

import re

content = 'python PHP java c javascript java php'
result = re.sub('php', 'python', content,flags=re.I)
print(result)


# python python java c javascript java python


count=  : 默认是全部替换,=几,就替换多少个查找到的字符。
re.I    : 不区分大小写。

sub方法设计的精妙之处,就是sub的第二个参数可以是一个函数 (将匹配的结果以参数的形式传递给函数)

import re

def judge(value):
    value = value.group() # 用group方法获取到匹配结果,以下逻辑是对value进行逻辑判断
    if int(value) < 60:
        return '不及格'
    elif int(value) < 80:
        return '中'
    elif int(value) < 90:
        return '良'
    else:
        return '优'
content = '小明:59 小红:66 小白:83 小绿:98 小王:100'
result = re.sub('\d+', judge, content)
# 这里sub的第二个参数就是一个函数judge,第一个参数匹配到的结果会作为value传递进judge函数中,从而在judge中可以对他进行判断,函数的返回值将会替换掉匹配结果。
print(result)


#小明:不及格 小红:中 小白:良 小绿:优 小王:优

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值