Python学习 正则表达式简要了解

正则表达式(regular expression) 是一种字符串匹配模式,通过特定的语法来检验一个字符串是否与某种模式匹配。正则表达式是一种功能十分强大的匹配模式,表达式形式特别丰富,但正因如此,所以觉得学起来比较困难。

个人觉得就是数学表达式如大于、不等于这种表达式的升级版。

目前python有re模块,保证了全部的正则表达式功能。很容易看出,re就是正则表达式英文名字的缩写。

首先,了解一下大致的语法情况。

语法:

1、正则表达式由普通字符(如字符a到z)和特殊字符(称为元字符)组成的表达式。提供一个模板与进行搜索的字符串进行匹配。

2、 对于可打印和不可打印字符,简单理解就是可打印字符,形如字符a到z,print后可以在显示屏显示。而不可打印字符也就是控制字符,如\n,代表换行,经过print后是没法打印出来的。

3、几种常见的不可打印字符:

\f         换页符

\n        换行符

\r         回车符

\s        任何空白字符 等价于[\f\n\r\t\v]

\t         制表符

\v         垂直制表符

4、限定符:

*           匹配前面的子表达式零次或者多次

+          匹配前面的子表达式一次或者多次

?          匹配 前面的子表达式零次或者一次

{n}        n是非负整数,匹配确定的n次

{n,}       n是非负整数,匹配大于等于n次,例如a{2,}   可以匹配baaaaa,但是不能匹配ba

{n,m}     中间没有空格,至少n次,至多m次

5、定位符

^             匹配以输入字符串开始的字符串,如^day,匹配以day开始的字符串。注意与放在中括号时的意义不同

$             匹配以输入字符串结束的字符串,如jump$,匹配以jump结尾的字符串。

6、常见的一些元字符,包括显式指定为元字符

\             代表转义

x|y          x或者y

[xyz]       匹配包含的任意一个字符

[^xyz]      匹配未包含xyz的任意一个字符,^在中括号作用代表负值,相反的意思。

[a-z]        代表匹配一个字符范围

\d            匹配一个数字字符,相当于[0-9]

\D           匹配非数字字符,相当于[^0-9]

\w           匹配数字、字母、下划线,相当于[A-Za-z0-9_]

以上是基本的语法,主要是一些特殊字符的意义。具体的使用,自己目前主要是python的re模块中使用。

Re模块:

1、原生字符r,代表后面的字符串都是字面上的意思。这是为了避免反斜杠的过度使用,出现歧义。官方文档

个人理解:在正则表达式中,可以使用‘\n’,一个反斜杠就是代表反斜杠,加n进行转义;可以使用‘\\n’,两个反斜杠转义成一个反斜杠,加n进行转义;也可以使用r‘\n’代表一个反斜杠加n进行转义。

加上原始字符r之后,后面的字符代表原始的含义,但组合起来仍然可以进行转义。

>>> print(re.match('\d','123'))
<re.Match object; span=(0, 1), match='1'>

>>> print(re.match('\\d','123'))
<re.Match object; span=(0, 1), match='1'>

>>> print(re.match(r'\d','123'))
<re.Match object; span=(0, 1), match='1'>

可以看出以上三种表达方式的结果是一样的 ,所以为了避免歧义,一般都会在正则表达式前面直接加r。

注意,原生字符r在python中应该是通用的。print也可以用,但是加上r之后,就不存在转义现象,r'\n'就是'\n',不会像在正则表达式代表换行符。

2、re.match()函数,只从字符起始位置开始匹配,开始位置不匹配,就返回none。可以通过.start()获取起始位置,.end()获取结束位置,.span()获取范围。

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

flags是正则表达式修饰符,可选参数。

可以使用group() 来获取匹配到的字符串,对应的是在正则表达式中以小括号匹配的内容,有几个小括号,代表有几组。组号从1开始。groups()获取的是所有组的字符串【没有are】。注意加s不一样。

>>> line = "You are my pretty girl"
>>> a = re.search(r'(.*) are (.*) (.*) (.*)',line)

>>> a.group()
'You are my pretty girl'

>>> a.groups()
('You', 'my', 'pretty', 'girl')

>>> a.group(1)
'You'

3、re.search()函数,对整个字符串进行匹配,直到找到一个匹配。注意与re.match()的区别。

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

 4、re.sub()函数,替换匹配项。

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

 repl:替换的字符串,也可以是一个函数。

count:替换的最大次数,默认0表示替换所有匹配项。

# 将line中的are替换为were
>>> new_line = re.sub('are','were',line)
>>> new_line
'You were my pretty girl'

5、re.findall(pattern, string, flags=0)  搜索整个字符串,以列表的形式返回匹配的字符串。

a = "You are the beautiful girl"
>>> c = re.findall("e",a)
>>> c
['e', 'e', 'e']

以上是大体的python正则表达式内容,比较复杂的正则表达式还没有接触到,遇到的话会不断进行更新记录。 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值