python 条件表达式换行_Python处理正则表达式,python

一.正则表达式

正则表达式是一个用特殊符号表示的字符序列,用来检查一个字符串是否与某种字符串模式匹配。

较常用的正则表达式有:

正则表达式

匹配对象

普通字符

匹配对应的字符

\n

匹配换行符

\t

匹配制表符

\d

匹配十进制数字

\D

匹配除了十进制数字的其他字符

\w

匹配字母,数字,下划线

\W

匹配除了字母,数字,下划线的其他字符

\s

匹配空白字符(space)

\S

匹配除了空白字符的其他字符

[xxxxx]

匹配[]内的任意一个

[^xxxx]

匹配除了[]内xxxx的任意字符

.

匹配除换行符外的任意一个

^

匹配字符串起始位置

$

匹配字符串结尾位置

*

前一个字符出现0或1或…次

?

前一个字符出现0或1次

+

前一个字符出现1或多次

{n}

前一字符恰好出现n次

{n,}

前一个字符至少出现n次

{n,m}

前一个字符出现n~m次

()

模式匹配单元:()内为要提取的内容

记忆:

1."\小写"和"\大写"互为否定(例:\d匹配十进制数字,\D则匹配非十进制数字)。

2.“在原子表[]内,^符号表示取否定意义”(例:[123]匹配123内任意一个,[ ^123]匹配除了123的其他任意字符)

二.python处理正则表达式

python处理正则表达式主要通过re模块,处理时import该模块。

import re

主要介绍re模块中三个较常用的匹配函数(match,search,findall):

(1)

re.match(pattern, string, flags)

函数的三个参数分别为正则表达式,模式串,可选参数(修改匹配某些规则)

常用的可选参数及其含义:

可选参数

含义

re.I

使匹配忽略大小写

re.S

使.也可以匹配换行符

模式起始位置

匹配模式串,若从起始位置匹配不成功,match()就返回none[即:

匹配成功的位置必须包括起始处

]

print(re.match(r"py","python"))

#out:

print(re.match(r"py","python").span())#span()返回匹配位置索引

#out:(0, 2)

print(re.match(r"py","python").group())#返回匹配到的对象

#out:py

print(re.match(r"th","python"))#不能从模式串的起始位置匹配

#out:None

print(re.match(r"Py","python",re.I))#可选参数使匹配不区分大小写

#out:

正则表达式前的

r

的含义指此字符串为一普通字符串,即转义字符

不使用其转义含义

(2)

re.search(pattern, string, flags)

函数的形参意义同上,此函数是扫

整个模式串

进行匹配,不用像match那样必须包括模式串起始位置。

例子的正则表达式的含义:从y开始,然后后面可以包括零个或多个除了换行符之外的字符(详细看上面表格中各正则表达式的组合含义)。

(字符串的匹配默认为贪心方式:即如果满足条件则匹配越多越好)。

print(re.search("y.*","pypypy"))

#out:

print(re.search("y.*","pypypy").span())

#out:(1, 6)

print(re.search("y.*","pypypy").group())

#out:ypypy

print(re.search("a.*","pypypy"))

#out:None

re.match

只匹配字符串的开始

,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search

匹配整个字符串

,直到找到一个匹配。

(3)

re.findall(string,start(起始位置索引,可选,默认为0),end(结束位置索引,不包括该位置,可选,默认为len))

在字符串中找到正则表达式所匹配的所有子串

(

注意: match 和 search 是匹配一次 ,findall 匹配所有

)

同时,使用findall要先把正则表达式编译出来,这里要用到另一个函数compile(pattern,flag)用来

编译字符串

(可写入可选参数修改匹配规则)。

reg=r"py*"#匹配p及连着0个或多个y

print(re.compile(reg).findall("py-Py-pyy"))

#out:['py', 'pyy']

print(re.compile(reg,re.I).findall("py-Py-pyy"))#匹配不区分大小写

#out:['py', 'Py', 'pyy']

print(re.compile(reg).findall("py-Py-pyy",1,7))#指定起始及终止位置

#out:['p']

三.匹配方式

主要分为两种方式:

1.贪心/贪婪模式(默认为这种模式)

此方式即为在满足条件的情况下匹配的字符越多越好。

reg=r"py*"

#匹配p及连着0个或多个y,贪婪模式匹配满足条件的最多个y

print(re.compile(reg).findall("py-Py-pyy"))

#out:['py', 'pyy']

2.精准/懒惰模式:

(1)*?

(2)+?

reg=r"py*?"

#此*?组合开启精准模式,原来y可匹配0个或多个,现在匹配最少(即0个就结束)

print(re.compile(reg).findall("py-Py-pyy"))

#out:['p', 'p']

这两种字符组合在一起后即表示精准模式,即匹配成功就停止。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值