python正则表达式

字符含义
\ . 表示要匹配字符后一个或前一个,包括字符,可和 . 结合使用

\ * 表示匹配某个字符后面所有或者前面所有,包括空的

+ 表示匹配某个字符后面所有或者前面所有,不包括空的

? 表示匹配字符前面一个或者后面一个,包括空的,结合 . 使用

.*? .+? 非贪婪模式 加问号

{} 表示 前面的字符匹配 指定的次数
[] 表示要匹配 指定的几个字符之一
比如
\d 匹配0-9之间任意一个数字字符,等价于表达式 [0-9]
\D 匹配任意一个不是0-9之间的数字字符,等价于表达式 [^0-9]
\s 匹配任意一个空白字符,包括 空格、tab、换行符等,等价于表达式 [\t\n\r\f\v]
\S 匹配任意一个非空白字符,等价于表达式 [^ \t\n\r\f\v]
\w 匹配任意一个文字字符,包括大小写字母、数字、下划线,等价于表达式 [a-zA-Z0-9_]
缺省情况也包括 Unicode文字字符,如果指定 ASCII 码标记,则只包括ASCII字母
\W 匹配任意一个非文字字符,等价于表达式 [^a-zA-Z0-9_]
$ 终止符 到某个字符终止时使用

写法:

我们分别介绍一下它们的含义:
点-匹配所有字符
. 表示要匹配除了 换行符 之外的任何 单个 字符。
比如,你要从下面的文本中,选择出所有的颜色。
苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的
也就是要找到所有 以 色 结尾,并且包括前面的一个字符的 词语。
就可以这样写正则表达式 .色 。
其中 点 代表了任意的一个字符, 注意是一个字符。
.色 合起来就表示 要找 任意一个字符 后面是 色 这个字, 合起来两个字的 字符串
验证一下,如下图所示

只要表达式正确,就可以写在Python代码中,如下所示

content = ‘’‘苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的’’’
import re
p = re.compile(r’.色’)for one in p.findall(content):
print(one)

运行结果如下
绿色
橙色
黄色
黑色
星号-重复匹配任意次

  • 表示匹配前面的子表达式任意次,包括0次。
    比如,你要从下面的文本中,选择每行逗号后面的字符串内容,包括逗号本身。注意,这里的逗号是中文的逗号。
    苹果,是绿色的
    橙子,是橙色的
    香蕉,是黄色的
    乌鸦,是黑色的
    猴子,
    就可以这样写正则表达式 ,.* 。
    紧跟在 . 后面, 表示 任意字符可以出现任意次, 所以整个表达式的意思就是在逗号后面的 所有字符,包括逗号
    验证一下,如下图所示

特别是最后一行,猴子逗号后面没有其它字符了,但是*表示可以匹配0次, 所以表达式也是成立的。

只要表达式正确,就可以写在Python代码中,如下所示
content = ‘’‘苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,’’’
import re
p = re.compile(r’,.’)for one in p.findall(content):
print(one)
运行结果如下
,是绿色的
,是橙色的
,是黄色的
,是黑色的

注意, .
在正则表达式中非常常见,表示匹配任意字符任意次数。
当然这个 * 前面不是非得是 点 ,也可以是其它字符,比如

加号-重复匹配多次

  • 表示匹配前面的子表达式一次或多次,不包括0次。
    比如,还是上面的例子,你要从文本中,选择每行逗号后面的字符串内容,包括逗号本身。
    但是 添加一个条件, 如果逗号后面 没有内容,就不要选择了。
    比如,下面的文本中,最后一行逗号后面 没有内容,就不要选择了。
    苹果,是绿色的
    橙子,是橙色的
    香蕉,是黄色的
    乌鸦,是黑色的
    猴子,
    就可以这样写正则表达式 ,.+ 。
    验证一下,如下图所示

最后一行,逗号后面没有其它字符了,+表示至少匹配1次, 所以最后一行没有子串选中。
问号-匹配0-1次
? 表示匹配前面的子表达式0次或1次。
比如,还是上面的例子,你要从文本中,选择每行逗号后面的1个字符,也包括逗号本身。
苹果,绿色的
橙子,橙色的
香蕉,黄色的
乌鸦,黑色的
猴子,
就可以这样写正则表达式 ,.? 。
验证一下,如下图所示

最后一行,逗号后面没有其它字符了,但是?表示匹配1次或0次, 所以最后一行也选中了一个逗号字符。
花括号-匹配指定次数
花括号表示 前面的字符匹配 指定的次数 。
比如 ,下面的文本
红彤彤,绿油油,黑乎乎乎乎,绿油油油油
表达式 油{3} 就表示匹配 连续的 油 字 3次
表达式 油{3,4} 就表示匹配 连续的 油 字 至少3次,至多 4 次
就只能匹配 后面的,如下所示:

贪婪模式和非贪婪模式
我们要把下面的字符串中的所有html标签都提取出来,
source = ‘Title
得到这样的一个列表
[’’, ‘’, ‘’, ‘’]
很容易想到使用正则表达式 <.>
写出如下代码
source = ‘Title
import re
p = re.compile(r’<.
>’)
print(p.findall(source))
但是运行结果,却是
[‘Title’]
怎么回事? 原来 在正则表达式中, ‘’, ‘+’, ‘?’ 都是贪婪地,使用他们时,会尽可能多的匹配内容,
所以, <.
> 中的 星号(表示任意次数的重复),一直匹配到了 字符串最后的 里面的e。
解决这个问题,就需要使用非贪婪模式,也就是在星号后面加上 ? ,变成这样 <.*?>
代码改为

source = ‘Title
import re# 注意多出的问号
p = re.compile(r’<.?>’)
print(p.findall(source))
对元字符的转义
反斜杠 \ 在正则表达式中有多种用途。
比如,我们要在下

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值