【python学习第11节笔记:正则表达式,python中使用正则表达式】

文章目录

  • 一,正则表达式
    • 1.1元字符
      • 1.1.1元字符(1)
      • 1.1.1元字符(2)
      • 1.1.1元字符(3)
      • 1.1.1元字符(4)
      • 1.1.1元字符(5)
  • 二,python中使用正则表达式
    • 2.1re.match
    • 2.2re.search
    • 2.3re.sub
    • 2.4 正则表达式修饰符

一,正则表达式

什么是正则表达式:正则表达式又称规则表达式。用来匹配,检索,替换符合某个规则的文本。表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个”规则字符串“,这个”规则字符串“用来表达对字符串的一种过滤逻辑。

1.1元字符

1.1.1元字符(1)

. 匹配单个字符,如 r.t匹配 rat,rot 等
* 匹配任意多个字符
+ 匹配一个或多个在它之前的那个字符,如:r+t 匹配 rt ,rrt 等
\ 转意字符将元字符当作普通字符

1.1.1元字符(2)

? 只能匹配0或1个在他之前的字符,如: r?t ,只匹配 t 或者 rt
| 两个匹配条件进行逻辑‘’或‘’运算,如: \(him\|her\) 匹配 him 或者 her
$ 匹配行结束符,如: boy$ 匹配以boy位行结尾的字符串
^ 匹配一行的开始,如: ^boy 匹配以boy为行首的字符串

1.1.1元字符(3)

[ ] 匹配括号中的任意一个字符,如:r[aou]t 匹配 rot, rat, rut
[c1-c2] 括号中可以使用连字符-来指定,如:[0-5],匹配 0 1 2 3 4 5
[^c1-c2] 匹配除了指定区间外的补集,如:[^257a-c]匹配除了2 5 7 a b c以外的任何一个字符

1.1.1元字符(4)

\< 和 \> 匹配词(word)的开始和结束,如:\匹配 them 不匹配 other
\( \) 将两个之间的表达式定义为一个‘“组”,并且将这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到 \9的符号来引用。如:%s/\(99\)/\1aa/g 将99替换成99aa

1.1.1元字符(5)

\{ i \} 和 \{i , j \} 匹配指定数目的字符,如:a[1-6]\{2\}能够匹配到a后面跟着的正好2个字符的a13, a24, a54等不会匹配到 a123

二,python中使用正则表达式

python通过使用re模块,获得全部正则表达式的功能

2.1re.match

对字符串进行完整的匹配(从0开始匹配)

re.match(pattern, string, flags=0)

pattern:  匹配的正则表达式
string:   要匹配的字符串
flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例1:

import re
print(re.match('www','www2 213 sad')) #在起始位置匹配
print(re.match('www','2 213 swwwad')) #不在起始位置匹配

#执行结果
<_sre.SRE_Match object; span=(0, 3), match='www'>
None

示例2:
. 代表任意一个字符
* 是前面一个字符的任意重复
re.I 表示忽略大小写
r 表示原始字符串(不用转义)

print("\ne")
print(r"\ne")
#执行结果

e
\ne

直接输出matchobj.group()会输出匹配到的整句话,matchobj.group(1)会输出匹配到的第一组
matchobj.group(2)会输出匹配到的第一组。

import re
line = "Page is a pig"
matchobj = re.match(r'(.*) is a (.*)',line,re.I)
print(matchobj.group())
print(matchobj.group(1))
print(matchobj.group(2))


#执行结果
Page is a pig
Page
pig

2.2re.search

扫描整个字符串并返回第一个成功的匹配

re.search(pattern, string, flags=0)

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

import re
print(re.search('www','2 213 swwwad'))
print(re.search('www','2 213 swwwad').group()) #匹配不上返回空

#执行结果
<_sre.SRE_Match object; span=(7, 10), match='www'>
www

2.3re.sub

用于替换字符串中的匹配项

re.sub(pattern , repl , string , count=0, flags=0)

pattern:  匹配的正则表达式
repl:  替换的字符串,也可以为一个函数
string:   要被查找替换的字符串
count:  模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例1:传入的是一个字符串
#.*$ 的意思是以#开头任意字符结尾
\D 的意思是非数字的字符串

import re
phone = "0086-10-12345678 #这是一个国内北京的电话号码"

#删除后面的注释
num = re.sub(r'#.*$',"",phone)
print(num)

#删除非数字的字符串
num = re.sub(r'\D',"",phone)
print(num)

#执行结果
0086-10-12345678 
00861012345678

示例2:传入的是一个函数
(?P…):这部分是正则表达式中的命名捕获组语法。它允许给一个子模式(…)指定一个名称,这里的名称是’value’。通过这个名称,可以在匹配结果中引用到这个具体的子模式。

\d+:这是一个子模式,用于匹配一个或多个数字字符。\d表示匹配任意一个数字字符(0-9),而+表示匹配前面的模式一次或多次。

import re
def double(matched):
    value = int(matched.group('value'))
    return str(value*2)

s = '321+123=444'
print(re.sub('(?P\d+)',double,s))

#执行结果
642+246=888

2.4 正则表达式修饰符

1,re.I : 忽略大小写匹配
2.,re.M : 多行匹配。使 ^ 和 $ 可以匹配每一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。
3.re.S : 单行匹配。使 . 可以匹配包括换行符在内的任意字符
4,re.X: 冗长模式。允许使用空白字符和注释来增加正则表达式的可读性。

你可能感兴趣的:(python学习,python,学习,笔记)