Python 正则表达式

 

findall 和 search 的区别

findall()

   1. 会返回所有匹配成功的结果并返回一个列表集合

search()

   1.会返回匹配成功的一个结果后就不再匹配了并且返回的是一个对象

   2. 没有匹配成功什么也不返回

   3. 匹配成功后取值调用 group()方法

 

split()

 正则匹配分割

import re

# 按照单个指定分割符进行分割
li=re.split( ',', 'a,b,c!d' )
# 按照多个指定分割符进行分割
li=re.split('[,!]', 'a,b,c!d' )

 

 

sub()

正则匹配替换

import re

res=re.sub( '\d+','A', 'abc123hello345' )
print(res)

# subn, 返回一个元组,第一个结果为替换的值,第二个结果为替换的次数
tup=re.subn( '\d+','A', 'abc123hello345' )
print(tup)

 

 

 

 

 

正则分组

分组正则方案1:

?P<>这是固定的写法,将字符串进行分组,分别分为 name一组和age一组

import  re

res=re.search('(?P<name>[a-z]+)(?P<age>[0-9]+)','jack23erick24')
val=res.group('name','age')
print(val) # ('jack', '23')

 

 

 

反斜杠的作用

当反斜杠和指定字符串搭配的时候则有着特殊的功能

\d 匹配 0~9当中任意一个数字

\D匹配 任意一个非数字的字符串

\s 匹配一个空格

\S 匹配一个非空格 

\b 匹配一个特殊的字符串

为了防止正则匹配前发生转义,一般要使用 原始字符串 r

re.findall( r'a\b'c  , ' hello a cthanks')

 

 

 

特殊字符串的匹配功能
符号  简称 功能 格式 使用 备注
. 逗号 匹配一个任意字符串 ############    
^ 尖角号 匹配的字符串必须是尖角号所规定的字符串开头 ^abc re.findall( '^abc' , 'abcdefg' ) 所匹配的字符串必须以abc开头,否则后面就不再进行匹配了
$ 刀勒符 匹配的字符串必须是刀勒符所规定的字符串结尾 $test re.findall( 'test$' , 'abcdefgtest' ) 所匹配的字符必须以test结尾,
* 星号 匹配 0~多次 abc* re.findall( 'abc*' , 'abccccc' ) 所匹配的字符串包含ab,或包含abc,或包含abcccccc等多个c
+ 加号 匹配 1~多次 abc+ re.findall( 'abc+' , 'abccccc' ) 所匹配的字符串至少包含abc,或包含多个abcccccc等多个c
? 问号 匹配 0~1次 abc? re.findall( 'abc?' , 'abc' ) 所匹配的字符串包含ab,或者包含abc
{} 大括号 匹配指定次数 abc{4} re.findall( 'abc{4}' , 'abcccc' ) 所匹配的字符串所包含abcccc
[a-z] 中括号 匹配a-z当中的任意一个字母 ab[a-z] re.findall( 'ab[a-z]' , 'abcderg1234' ) 所匹配的字符串所包含abc
[^a-z] 中括号 匹配不包括a-z当中的任意一个字符      
\d 反斜杠d 匹配0-9当中的任意一个数字      
\D 反斜杠D 匹配非数字当中的任意一个字符串      
\b 反斜杠b 匹配一个特殊字符,例如空格,&,#等 \b re.findall( r'i\b' , 'helo i am a list' ) 匹配字符串包含i和空格
() 小括号 分组,将表达式看作整体 (abc)* re.findall( '(abc)*' , 'abcabcabc' ) 匹配多个 abc,abc,abc
           
posted @ 2020-10-10 11:24  leungqingyun  阅读(65)  评论(0)    收藏  举报