【python】正则匹配基本方法

正则表达式:匹配或查找符合某些规则的字符串数据
python中通过正则表达式对字符串进行匹配需要使用re模块

匹配单个字符

符号功能
.匹配任意一个字符
[ ]匹配[ ]中列举的字符
\d匹配数字0-9
\D匹配非数字
\s匹配空格
\S匹配非空格
\w匹配非特殊字符,即a-z,A-Z,0-9,(下划线),汉字
\W匹配特殊字符

匹配多个字符

符号功能
*匹配前一个字符出现0次或者无限次
+匹配前一个字符出现1次或者无限次
?匹配前一个字符出现1次或者0次
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现m到n次

匹配开头和结尾

符号功能
^匹配字符串开头
$匹配字符串结尾

匹配分组

符号功能
|匹配其左右任意一个表达式
(ab)括号中字符作为一个分组
\num引用分组num匹配到的字符
(?p<name>)分组起别名
(?P=name)引用别名为name分组匹配到的字符串

基本使用方法

1、match匹配

match方法默认从头开始匹配,只匹配一次

基本格式:

result = re.match(正则表达式,要匹配的字符串)

匹配成功则返回match对象,匹配失败返回None,需使用group方法提取匹配结果数据。

import re

ret = re.match('hello','hello world')
print(type(ret)) # <class '_sre.SRE_Match'>
print(ret) # <_sre.SRE_Match object; span=(0, 5), match='apple'>
if ret: 
	# 使用group方法提取数据
    print(ret.group()) # hello
2、search匹配

search方法在字符串汇总任意位置进行查找,且只查找一次

基本格式:

result = re.search(正则表达式,要匹配的字符串)

匹配成功则返回match对象,匹配失败返回None,需使用group方法提取匹配结果数据。

import re

ret = re.search('\d+','crawl 10 spider 20')
print(type(ret)) # <class '_sre.SRE_Match'>
print(ret) # <_sre.SRE_Match object; span=(6, 8), match='10'>
if ret:
    print(ret.group()) # 10
3、findall查找

findall方法从任意位置查找,匹配多次,将匹配结果一次性返回,返回形式为列表

基本格式:

result = re.findall(正则表达式,要匹配的字符串)

匹配成功则返回list对象,匹配失败返回空列表。

import re

ret = re.findall('\d+','crawl 10 spider 20')
print(type(ret)) # <class 'list'>
print(ret) # ['10', '20']
4、sub替换

sub方法从任意位置进行匹配,匹配成功后将匹配到的数据进行替换

基本格式:

result = re.sub(正则表达式,替换字符串,要匹配的字符串,count = 替换次数)

sub方法中用count参数指定替换次数,不指定或count=0时默认全部替换
匹配成功返回替换后的字符串,匹配失败则返回原始字符串

import re

ret = re.sub('\d+','111','crawl 10 spider 20',count=1)
print(type(ret)) # <class 'str'>
print(ret) # crawl 111 spider 20
5、split根据匹配进行切割字符串

split方法
基本格式:

result = re.split(正则表达式,要匹配的字符串,maxsplit= 替换次数)

split方法中用maxsplit参数指定分割次数,默认全部分割
匹配成功返回分割后的字符串列表,匹配失败则整个用于匹配的字符串作为列表的一项进行返回

import re

ret = re.split(',', 'apple, pear, grape, cherry',maxsplit=1)
print(type(ret)) # <class 'list'>
print(ret) # ['apple', ' pear, grape, cherry']

贪婪和非贪婪

python中数量词默认是贪婪地,总是尝试匹配尽可能多的字符,非贪婪则相反,总是尝试匹配尽可能少的字符

非贪婪字符

在‘*’,‘?’,‘+’,‘{m,n}’后面加上非贪婪符,使贪婪编程非贪婪

贪婪:正则匹配中从左到右顺序求值时,会尽量抓取满足匹配最长的字符串

import re
str = "this is a number 234-234-234-234"
ret = re.match('.+(\d+-\d+-\d+-\d+)',str)
if ret:
    # 获取分组数据
    print(ret.group(1)) # 4-234-234-234

非贪婪:加上非贪婪字符使分组前的数据尽可能少的匹配字符

import re
str = "this is a number 234-234-234-234"
ret = re.match('.+?(\d+-\d+-\d+-\d+)',str)
if ret:
    # 获取分组数据
    print(ret.group(1)) # 234-234-234-234
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值