欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python re正则模块

程序员文章站 2022-07-10 13:50:28
...

问题描述:

对于比较复杂的字符串处理任务,需要依靠正则表达式。

使用流程:

首先需要导入 re 模块


import re

常用的元字符

符号 含义
. 匹配除 “\n” 和 “\r” 之外的任何单个字符。
^ 匹配字符串开始位置
$ 匹配字符串结束位置
* 前面的元素重复0次,1次或多次
? 前面的元素重复0次或1次
+ 前面的元素重复1次或多次
{n} 前面的元素出现了n次
{n, } 前面的元素至少出现n次
{n. m} 前面的元素出现的次数介于n-m之间
( ) 进行分组,输出括号中的部分

常用的通用字符

符号 含义
\s 匹配空白字符
\w 匹配任意字母/数字/下划线
\W 匹配任意字母/数字/下划线以外的字符
\d 匹配十进制数字
\D 匹配十进制数字以外的值
[0-9] 匹配一个0~9之间的数字
a-z 匹配小写英文字母
A-Z 匹配大写英文字母

常用的函数

search

search方法能够找出子串第一个匹配位置


import re

s = 'hello world. hello world.'

key_word = 'world'
# 找到后返回re.Match object
r = re.search(key_word, s)
# 返回一个元组包含匹配 (开始,结束) 的位置
r.span()


match

match从原字符串的开始位置匹配(search函数是从任意位置匹配)

finditer

匹配迭代器
返回所有匹配位置的迭代器

返回对象是 re.Match, 可以使用 span() 方法找到它的开始和结束位置


import re

s = 'hello world. hello world.'

key_word = 'world'

r = re.finditer(key_word, s)

for i in r:
    print(i.span())

findall

re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

re.I

re.I是方法的可选参数,表示忽略大小写。


s = "That"
pat = "t"

r = re.finditer(pat, s, re.I)
for i in r:
	print(i.span())

split

字符串中的split函数只能分割简单的情况

如果字符串的分隔符有 , ; \t |

words = re.split(r'[,\s;|]+', s)
sub

替换匹配到的字符串


content = "hello world, hello world"

 # 要替换的部分
pattern = re.compile(r'world')

m=pattern.sub("kitty", content)

compile

预编译方法,如果要用同一匹配模式进行多次匹配,可以使用compile预先编译串,可以提升运行效率

贪心捕获与非贪心捕获

(.*) 表示捕获任意多个字符,尽可能多的匹配字符,要找到最后一个匹配的,把中间部分返回,也被称为贪心捕获

(.*?)非贪心捕获,找到第一个匹配后返回,把中间部分返回,称为非贪心捕获

案例

匹配浮点数和整数


import re

s = 's2sss1.02sssss5s'

pattern = r'\d+\.?\d*'

r = re.findall(pattern, s)

匹配正整数

第一个数为大于1-9
第二个为0-9,可以存在或不存在


import re

s = [-16, 1.02, 5, 0, 127, a]

pattern = r"^[1-9]\d*$"

[i for i in s if re.match(pattern, str(i))]

正则表达式的测试网站

相关标签: Python