Python中正则表达式的详解

Python中正则表达式的详解

一:3种常用的匹配模式

1、re.match(pattern,string) 从目标字符串的开始进行匹配

pattern='aacccdddxxefxcz'  #pattern也可以是字符
string='aacccdddxxefxcz123 python_3.2014212086'
result=re.match(pattern,string)# 没有匹配到结果的时候返回None
print(result)
print(result.span()) # 匹配信息的位置
print(result.group())# 匹配信息的内容

在这里插入图片描述

2、re.search(pattern,string) 扫描整个字符串并返回第一个成功的匹配

pattern='cd'
string='abcddddddefg123 python_3.5123abc'
result=re.search(pattern,string)
print(result)
print(result.span())
print(result.group())

在这里插入图片描述
3、re.findall(pattern,string)
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表,如果匹配成功的部分发生交叉,则取先匹配成功的部分,是不放回的匹配

string='abcddPythonddddefg123Python_3.5123abc'
pattern='Python'
result=re.findall(pattern,string)# 匹配所有符合规则的元素,返回列表
print(result)

在这里插入图片描述

二:通用字符做原子(三种常用的匹配模式均适用)

通用字符做原子
\d匹配数值字符 0-9 \D 取反
\w匹配字符数字中文下划线 \W 取反
\s匹配空白字符 \S 取反
.(点)#匹配除了换行符外所有字符

pattern='\d'
string='abcde123 PY_3.5 ? # % 中文 \n \t'
result=re.findall(pattern,string)
print(result)

在这里插入图片描述

三:原子表(自定义单个字符的规则)

pattern='[^\w\s]'
#[a-zA-Z0-9] [^\w\s]取反 [一二三四五六七八九十]
#[^...]	不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
string='ybcdefg123 Python_3.5 a R $ % !'
result=re.findall(pattern,string)
print(result)

在这里插入图片描述

四:原子表(自定义单个字符的规则)

pattern='[^\w\s]'
#[a-zA-Z0-9] [^\w\s]取反 [一二三四五六七八九十]
#[^...]	不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
string='ybcdefg123 Python_3.5 a R $ % !'
result=re.findall(pattern,string)
print(result)

在这里插入图片描述

五:元字符

5.1 边界限定元字符

pattern1='[a-zA-Z]$'# 匹配末尾位置
pattern2='^\d'# 匹配开头位置
string='123zc 123python_abc_3.5abc'
print(re.findall(pattern1,string))
print(re.findall(pattern2,string))

在这里插入图片描述
5.2 次数限定元字符

‘*’ 重复前面一个字符0~无穷次
‘+’ 重复前面一个字符1~无穷次
‘?’ 重复前面0-1次
{n} 重复n次 {n,}重复n次到无穷次 {n,m}重复n次到m次

pattern1='abcd*'
pattern2='abcd+'
pattern3='abcd?'
pattern4='abcd{2}'
pattern5='abcd{2,}' # 2-无穷次
pattern6='abcd{2,4}'# 2-4次
string='abcdddddddddefg123 python_3.5abc'
print(re.findall(pattern1,string)) #先重复无穷次再重复0次
print(re.findall(pattern2,string))
print(re.findall(pattern3,string)) #先重复无穷次再重复0次
print(re.findall(pattern4,string)) #重复2次
print(re.findall(pattern5,string)) #重复2-无穷次次
print(re.findall(pattern6,string)) #重复4次

Python中正则表达式的详解_第1张图片
5.2 模式选择符

pattern='python|php'
string1='abcdefg123 python_3.5abcphp'
string2='abcdefg123 php_3.5abc'
print(re.findall(pattern,string1))
print(re.findall(pattern,string2))

在这里插入图片描述
5.3 模式单元符

pattern='(\w{6})(\d.\d)'
#  (\w{6})(\d.\d)_
string='abcdcdefcdcdg123python3.5_php_3.5abc'
result1=re.search(pattern,string)
result2=re.findall(pattern,string)
print(result1)
print(result2)

在这里插入图片描述

六:贪婪模式和懒惰模式

正则表达式中用于表示匹配数量的元字符如下:
?   重复0次或1次,等同于{0,1}
*  重复0次或更多次,等同于{0,}
+  重复1次或更多次,等同于{1,}
{n,} 重复n次及以上
上面的表示匹配次数的元字符分为贪婪型和懒惰型2种类型。其表达式分别如下。
贪婪型 懒惰型
*     *?
+     +?
{n,}     {n,}?
贪婪型的匹配会去抓取满足匹配的最长的字符串,这个也是正则表达式的默认的模式。当我们不需要最长的匹配的时候就需要使用懒惰模式。

pattern1=r'
  • .*
  • ' pattern2=r'
  • .*?
  • ' string=r'my string is:
  • zc132
  • name
  • 404
  • ' result1=re.findall(pattern1,string) result2=re.findall(pattern2,string) print(result1) print(result2)

    在这里插入图片描述

    七:指定匹配字符进行分割

    string='a1b2c3d4'
    pattern='[0-9]'
    result=re.split(pattern,string,2)# maxsplit指定次数
    print(result)
    print('a-b----c'.split('-'))
    print(re.split('-+','a-b----c'))
    

    在这里插入图片描述

    八:指定匹配字符进行替换

    string='a1 python b2c3d4 cython '
    pattern='[cp]ython'
    result=re.sub(pattern,'PHP',string,1)# count控制次数
    print(result)
    

    在这里插入图片描述

    你可能感兴趣的:(python,正则表达式,具体介绍)