正则表达式 2

166 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

正则表达式内置函数

使用正则表达式时首先导入

import re
  1. re.compile 有两个参数,第一个参数是要匹配的范式,第二个参数是标志。编译正则表达式模式,返回一个正则对象的模式。
ss = "夏洛克 有华生,夏洛克 很厉害"
cc = re.compile('\w*夏洛克\w*')
print(cc.findall(ss))   #查找所有包含'夏洛克'的单词  
#返回 ['夏洛克', '夏洛克']

以下函数有三个参数,第一个参数是要匹配的范式,第二个参数是要匹配的字符,第三个参数是标志位。

  1. re.match 匹配字符串起始位置
m = re.match('ac','acfha')  #查询起始字符是ac
m.group()  
## 返回'ac'
  1. re.search 匹配整个字符串直到找到第一个匹配值返回 注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法: group() 返回被 RE 匹配的字符串 start() 返回匹配开始的位置 end() 返回匹配结束的位置 span() 返回一个元组包含匹配 (开始,结束) 的位置
s = re.search('[a-zA-Z]','faaaaac495dddfha') #匹配大小写英语字母,找到第一个就返回
s.group()  
#'f'
  1. re.findall 匹配成功的字符串会返回一个列表
f = re.findall('\d+','a1b2c3')    #返回数字
f
#['1', '2', '3']
  1. re.finditer 返回一个顺序访问每一个匹配结果的迭代器。
iter = re.finditer(r'\d+','There are 35 girls and 12 boys') #返回数字
for i in iter:
    print(i)
    print(i.group())
    print(i.span())
#<re.Match object; span=(10, 12), match='35'>
#35
#(10, 12)
#<re.Match object; span=(23, 25), match='12'>
#12
#(23, 25)
  1. re.split split(pattern, string, maxsplit=0, flags=0) 第一个参数:分隔符。 第二个参数:要分割的字符串。 第三个参数:最大分割次数。             <0不分割,=0分割无限次,>0分割maxsplit次。
ss = '夏洛克 有华生 夏洛克 很厉害'
mm = re.split('\s',ss)
print(mm)
#['夏洛克', '有华生,夏洛克', '很厉害']
  1. re.sub sub(pattern, repl, string, count=0, flags=0) pattern:要寻找的模式 repl:代表replacement,要替换的字符。也就是用repl去替换pattern count:要替换的最大次数;count 必须是非负整数。
b = "a468a b468a486a"
n1 = re.sub('\d+','5',b,count=2)
print(n1)
#a5a b5a486a
n2 = re.sub('\d+','5',b,count=0)
print(n2)
#a5a b5a5a