python常用正则表达式

Python正则表达式

常用函数

match(pat, str):检查字符串的开头是否符合某个模式

search(pat, str):检查字符串中是否符合某个模式

findall(pat, str):返回所有符合某个模式的字符串,以列表形式输出

finditer(pat, str):返回所有符合某个模式的字符串,以迭代器形式输出

split(pat, str):以某个模式为分割点,拆分整个句子为一系列字符串,以列表形式输出

sub(pat, repl, str):句子 str 中找到匹配正则表达式模式的所有子字符串,用另一个字符串 repl 进行替换

compile(pat):将某个模式编译成对象,供之后使用

re.match

从起始位置开始匹配,返回匹配的对象;若无匹配,则返回none
语法:

re.match(pattern,string, flags=0)
参数说明
pattern匹配的正则表达式
string要匹配的字符串
flags标志符,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等

re.search

遍历字符串,并返回第一个成功的匹配
语法:

re.search(pattern,string, flags=0)

re.sub

替换字符串中的匹配项

re.sub(pattren,repl,string,count=0,flags=0)

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。(可选)
  • flags : 编译时用的匹配模式,数字形式。(可选)
    e.g.1
import re
phone = "2004-959-559 # 这是一个电话号码"
num = re.sub(r'#.*$',"",phone)  #去除注释
## 2004-959-559 

e.g.2

import re

def double_num(matched):
	value=int(matched.group('value'))
	return str(value*2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))

compile函数

编译正则表达式,生成pattren对象,供match() 和 search() 使用。
语法:

re.compile(pattern[,flags])
  • pattern : 一个字符串形式的正则表达式
  • flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
    • re.I 忽略大小写
    • re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    • re.M 多行模式
    • re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . '不包括换行符)
    • re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    • re.X 为了增加可读性,忽略空格和’ # '后面的注释

e.g.1

import re
pattern = re.compile(r'\d+')
pattren.metch('string')

findall

返回一个列表,包含所有匹配的子串

re.findall(pattern, string, flags,pos,endpos)

参数:

  • string 待匹配的字符串。
  • pos 可选参数,指定字符串的起始位置,默认为 0。
  • endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
    e.g.1
import re
 
pattern = re.compile(r'\d+')   # 查找数字
result1 = pattern.findall('aaa 123 bbbb 456') #['123', '456']
result2 = pattern.findall('aa88bbb123ccccc456', 0, 10) #['88', '12']

re.finditer

返回一个迭代器,包含所有匹配的子串

语法:

re.finditer(pattern, string, flags,pos,endpos)

e.g.1

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

re.split

匹配的分隔符两边的实体都会被当成是结果中的元素返回。如果正则表达式中包含一个括号捕获分组,那么被匹配的文本也将出现在结果列表中,目的是保留分割字符串。

s = 'Kobe Bryant loves Gianna Bryant'
print( re.split(r'\s', s) )
['Kobe', 'Bryant', 'loves', 'Gianna', 'Bryant']

转义字符

常用

点 . 表示除新行(\n)的任意字符,它是个通配符。
托字符 ^ 表示字符串开头。
美元符 $ 表示字符串结尾。

贪婪模式:

  • *表示后面可跟 0 个或多个字符

  • +表示后面可跟 1 个或多个字符

  • ?表示后面可跟 0 个或 1 个字符

非贪婪模式:

  • *? 表示后面可跟 0 个或多个字符,但只取第一个

  • +?表示后面可跟 1 个或多个字符,但只取第一个

  • ?? 表示后面可跟 0 个或 1 个字符,但只取第一个

限定边界

{}可以设定具体的上界或(和)下界,使得代码更加有效也更好读懂,规则如下:

  • {n} 左边的字符串是否出现 n 次
  • {n, } 左边的字符串是否出现大于等于 n 次
  • {, n} 左边的字符串是否出现小于等于 n 次
  • {n, m} 左边的字符串是否出现在 n 次和 m 次之间。

其他

反斜杠 \ 可对特殊字符进行转义,也可对普通字符转义。
\b:匹配空字符串,但仅适用于单词的“首尾”
\B:匹配空字符串,但仅适用于单词的“非首尾”
\d:匹配任何“数字”字符,等价于 [0-9]
\D:匹配任何“非数字”字符,等价于[^0-9]
\s:匹配任何“空白”字符,等价于[\t\n\r]
\S:匹配任何“非空白”字符,等价于 [^\t\n\r]
\w:匹配任何“字母数字下划线”字符,等价于[a-zA-Z0-9_]
\W:匹配任何“非字母数字下划线”字符,等价于[^a-zA-Z0-9_]
\A:匹配句子的“开头”字符,等价于 ^
\Z:匹配句子的“结尾”字符,等价于 $
\t:匹配句子的“制表键 (tab)”字符
\r:匹配句子的“回车键 (return)”字符
\n:匹配句子的“换行键 (newline)”字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值