Python--正则表达式

1、re.math函数

  • re.math尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
  • 语法:re.match(pattern,string,flags=0) pattern–匹配的正则表达式 string–要匹配的字符串 flags–标志位,用于控制正则表达式的匹配方式
  • pattern–匹配的正则表达式 string–要匹配的字符串 flags–标志位,用于控制正则表达式的匹配方式
import re
line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
matchObj = re.match(r'(.* )are(.*)', line, re.M | re.I)
#matchObj = re.match( r'are (.*?) .*', line, re.M|re.I)
#matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
    print("matchObj.group() : ", matchObj.group())
    print("matchObj.group(1) : ", matchObj.group(1))
    print("matchObj.group(2) : ", matchObj.group(2))
else:
    print("No match!!")

输出

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

2、re.search函数

  • re.search扫描整个字符串并返回第一个成功的匹配;
  • 语法:re.search(pattern, string, flags=0);
import re
line = "Cats are smarter than dogs";

searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)

if searchObj:
    print("searchObj.group() : ", searchObj.group())
    print("searchObj.group(1) : ", searchObj.group(1))
    print("searchObj.group(2) : ", searchObj.group(2))
else:
    print("Nothing found!!")

输出:

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

3、re.sub – 用于替换字符串中的匹配项
语法:re.sub(pattern,repl,string,count=0,flags=0)

  • pattern: 正则中的模式字符串。
  • repl: 替换的字符串,也可为一个函数。
  • string: 要被查找替换的原始字符串。
  • count: 模式匹配后替换的最大次数,默认0表示替换所有的匹配。
  • flags: 编译时用的匹配模式,数字形式。
import re
phone = "2004-959-559 # 这是一个电话号码"
# 删除注释
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符 '$'匹配一行字符串的结尾
num = re.sub(r'#(.*$)', '', phone)
print(num)

# 移除非数字的内容
# '\D'匹配任意非数字的字符
num = r

输出:

2004-959-559 
2004959559

4、compile函数
compile函数用于编译正则表达式,生成一个正则表达式对象,供match()和search()这两个函数使用。
语法格式:re.compile(pattern[,flags])

  • pattern : 一个字符串形式的正则表达式
  • flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
import re
# '\d'用于匹配任意数字,等价于[0-9]   '+'用于匹配1个或多个表达式
pattern= re.compile('\d+')
# 从头部开始查找,没有匹配
m = pattern.match('one12twothree34four')
print(m)
# 从'1'的位置开始匹配
m = pattern.match('one12twothree34four',3,10)
print(m)
m=pattern.search('one12twothree34four',5)
print(m)

输出:

None
<_sre.SRE_Match object; span=(3, 5), match='12'>
<_sre.SRE_Match object; span=(13, 15), match='34'>

5、findall – 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法格式:
语法格式:find(string[,pos[,endpos]])

  • string:待匹配的字符串。
  • pos:可选参数,指定字符串的起始位置,默认为0。
  • endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。
pattern = re.compile('\d+')
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456',0,10)
print(result1)
print(result2)

输出:

['123', '456']
['88', '12']

6、re.finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
语法格式:re.finditer(pattern, string, flags=0)

it = re.finditer(r"\d+", "12a32bc43jf3")
for match in it:
    print(match.group())

输出:

43
3

7、re.split
split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:
re.split(pattern, string[, maxsplit=0, flags=0])
maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章