python正则表达式花括号_python正则表达式(+ {})(二)

加号-重复匹配多次

+ 表示匹配前面的子表达式一次或多次,不包括0次

比如,还是上面的例子,你要从文本中,选择每行逗号后面的字符串内容,包括逗号本身

但是,添加一个条件,如果逗号后面没有内容,就不要选择了。

比如,下面的文本中,最后一行逗号后面没有内容了,就不要选择了

苹果,是绿色的

橙子,是橙色的

香蕉,是黄色的

乌鸦,是黑色的

猴子,

就可以这样写正则表达式 ,.+

验证一下如下图所示( + 和 * 的区别就是:不包括0次,所以没有选中最后一行):

473210-20200331161413703-168007089.png

,.+

473210-20200331162532362-1980314995.png

绿色+

473210-20200331162041328-388813825.png

.+色

473210-20200331162301527-198442837.png

最后一行,猴子逗号后面没有其他字符了,但是?表示匹配一次或0次,所以最后一行也选中了一个逗号字符

,.?

473210-20200331164142361-890930158.png

花括号-匹配指定次数

花括号表示前面的字符匹配 指定的次数

比如,下面的文本

红彤彤,绿油油,黑乎乎,绿油油油油

表达式 油{3,4}就表示匹配连续的油字至少3次,至多4次

473210-20200331221152512-1442149287.png

473210-20200331221344875-1225792726.png

473210-20200331221459267-403049953.png

实际可以应用于获取手机号:

473210-20200331221756985-890775566.png

贪婪模式和非贪婪模式

我们要把下面的字符串中所有html标签都提取出来

source='

Title

得到这样的一个列表:

['','

','','']

很容易想到使用正则表达式<.*>

写出如下代码

source='

Title

imort re

p=re.compile(r'<.*>')

print(p.findall(source))

运行结果却是:

['

Title']

怎么回事?原来在正则表达式中,' * ',' + ', ' ? '都是贪婪的,使用他们时,会尽可能多的匹配内容

所以,<.*> 中的星号(表示任意次数的重复),一直匹配到了字符串最后的里面的e。

解决这个问题,就需要使用非贪婪模式,也就是在星号后面加上?,变成这样<.*?>

代码改为:

source='

Title'

imort re

p=re.compile(r'<.*?>')

print(p.findall(source))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值