正则表达式

本篇内容:

re.search(pattern,string,flags=0): 匹配第一个位置

return match对象,未成功返none

flags:

  • re.I(re.IGNORECASE)忽略正则表达式的大小写
  • re.M (re.MULTILINE)在非多行模式下只会匹配第一行;多行模式下**,^$ 还会分别匹配每一行**(like “Line1\nLine2\nLine3”),并允许.匹配换行符。
  • re.S (re.DOTALL)让.可匹配换行符

re.match()从开始位置进行pattern匹配,其他同search

re.fullsearch()整个字符串是否匹配

re.findall() 以顺序列表返回全部的匹配字符串

1
2
3
improt re
ls = re.findall('[1-9]\d{5}','BIT100081 TSU100084')
#['100081','100084']

re.finditer()返回所有符合匹配的迭代match

1
2
3
4
5
import re

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

上面这些参数都是一样的

re.split(pattern,string,massplit=0,flags=0)

按照正则表达式匹配结果分割(依次拿出符合的字符串,达到分隔次数就停止,且注意最后若有其他字符的情况),返回列表

maxsplit:最大分割数,剩余部分作为最后一个元素输出

1
2
3
4
5
6
import re 
re.split(r'\W+','Words, words, words.')
# [‘Words’, ‘words’, ‘words’, ‘’] 注意最后输出一个空字符串
re.split(r'\W+', 'Words, words, words.', 1)
# [‘Words’, ‘words, words.’]
# 如果pattern中捕获到括号,那么所有的组里的文字也会包含在列表里。

re.sub(pattern,repl,string,count=0,flags=0)替换匹配项

repl:注意其在第二个。用于替换的字符串

count:匹配的最大替换次数

1
2
3
4
5
import re

re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100084 ')

'BIT:zipcode TSU:zipcode'

re.compile(pattern)

一个正则表达对象(正则对象),可多次复用提高效率

1
2
3
4
prog=re.compile(pattern)
result=prog.match(string)
# 即
result=re.match(pattern,string)
  • .search(string[, pos[, endpos]])
  • .match(string[, pos[, endpos]])
  • .findall(string[, pos[, endpos]])
  • .finditer(string[, pos[, endpos]])
  • .split(string, maxsplit=0)
  • .sub(repl, string, count=0)

endpos:从pos到endpos-1的字符会被匹配;endpos<pos,返回None

pattern.search(string,0,50) 等价于pattern.search(string[:50],0)。

match对象:

  • start()end() : 其在原始字符串中的开始和结束位置的索引
  • span() : 匹配字符串开始和结束位置的索引 (start(), end() )
  • groups() : 包含所有匹配子字串的元组。groups(n)则返回第n个被捕获的子字符串
  • group() : 被匹配的整个字符串=groups(0)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
improt re
match = re.search(r'[1-9]\d{5}','BIT 100085')
if match:
print(match.group(0))
#100085

pattern = r'(([0-9]+)([a-z]+))'
string = '123abc456def'
match = re.search(pattern, string)

print(match.group()) # 输出整个匹配: 123abc
print(match.group(0)) # 同上,等同match.group()
print(match.group(1)) # 第一个捕获组: 123abc
print(match.group(2)) # 第二个捕获组: 123
print(match.group(3)) # 第三个捕获组: abc
print(match.groups()) # 所有捕获组的元组: ('123abc', '123', 'abc')

此处参考:

Re库的介绍

python基础—re模块下的函数及匹配对象的属性与方法(re.match()/re.search()…等)

规则基础:菜鸟教程-正则表达式