Python03-正则表达式的补充

持续更新中…

关于re方法的补充

1、查找

  1. 如果遇到需要从一段字符串中取某类型的字符的话,往往采用re.search()和re.findall()方法
    例如:我们需要取一段字符串“abcsdjkjj”中的最后一个字母
import re
s1='abcsdjkjj'
result=re.findall(r"[A-Za-z]",s1)[-1]
print(result)

这里用了一个巧方法,把取最后一个字符放到了列表中,并没有用正则表达式来进行抓取,降低了难度。

  1. 把一个字符串中的所有字母找出来并拼成一个字符串
    这时我们需要先用findall方法来找出所有字母,然后利用拼接的方法,即join()方法来进行连接即可。
import re

pattern = re.compile(r"[A-Za-z]")
result="".join(pattern.findall("a231afcr2f34feedf"))
print(result)
  1. 学会了找字符串中的单个字母,我们还会遇到需要找单词的。这时只需要一个小变化,上面的r"[A-Za-z]“换成r”[A-Za-z]+"
import re
s="I am 13 years old"
pattern = re.compile(r"[A-Za-z]+")
result = pattern.findall(s)
print(result)

2、特殊字符的使用

我们需要匹配出一行字符串中的所有开头的字母内容时,这时就需要靠字符规则了,首先想到的是’^’,但是肩号并不能匹配出所有的字母开头,而是匹配出一个字符串的第一个字母。
那么我们可以使用\b,这个代表着单词的开头或者结尾或者是单词的分界处的符号。
关于\b,在python02-正则表达式中我总结的比较浅,这里详解一下,\b就是隐式位置,隐式位置的含义为:前后必不全是\w。

例如:I have a nice girl。 其中的a表示为:
空格\ba\b空格,也就是说第一个\b隐式位置,前面是空格,后面是字符\w。代表的是单词开头,另一个\b,后面是空格,前面是字符,所以它代表的是单词的结尾。
记住:字符,空格均是显式位置,\b代表的是隐式位置,是不可见的。

那么我们要提取出一行字符串的所有开头字母,就可以用下面这种方法:

import re
s="i love you not because of who you are!"
print(re.findall(r"\b\w",s))

3、字符集的使用

  1. 我们还会遇到需要匹配度比较高的字符串,比如需要匹配2,3,4或者多个按指定位置排列的字符串,那么我们可以采用python02中的‘[字符集]’方法:
    写一个正则表达式,使其能同时识别下面所有的字符串:‘bat’,‘bit’, ‘but’, ‘hat’, ‘hit’, 'hut‘
import re

s="'bat', 'bit', 'but', 'hat', 'hit', 'hut','yat','har','hot'"

print(re.findall(r"..t",s))
print(re.findall(r"[bh][aiu]t",s))
  1. 如果需要匹配字符串中完整的年月日和时间字段,时间的匹配也可以使用字符集的方式来进行匹配,即指定每一位的数字范围。
import re
s="我出生时间为2001-01-01 00:00:00,今天时间为2021-11-13 12:20:00"
#首先去除分隔符
for i in s.split(","):#年份指定第一位是1或2,但是后三位是0-9随意,三次{3}
    result = re.search(r"[12][0-9]{3}-([0][1-9]|[1][0-2])-([0-2][0-9]|[3][01]) ([01][0-9]|[2][0-3]):([0-5][0-9]):([0-5][0-9])",i)
    if result:
        print(result.group())
    else:
        continue
  1. 将每行中的电子邮件地址替换为自己的电子邮件地址,匹配同样,但是由于电子邮件的格式并没有时间那么规范,所以单纯用特殊字符就可以解决:
#将每行中的电子邮件地址替换为自己的电子邮件地址
import re
s="""
1234867@qq.com
lihuali@sdcion.com
"""
s1="123456@azhe.com"
for i in s.split("\n"):
    result = re.search(r"[\w]+@[\w]+.com",i)
    if result:
        s=s.replace(result.group(),s1)
    else:
        continue
print(s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值