天天看点

python常用正则表达式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

语法:

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

re.search

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

语法:

re.sub

替换字符串中的匹配项

参数:

  • 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() 使用。

语法:

  • 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

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

参数:

  • 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

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

语法:

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)”字符