正则表达式匹配非某字符串的情况

http://t.zoukankan.com/zongfa-p-14818734.html

正则表达式中,如果想要不匹配某个字符可以使用如下

[^a]* 表示匹配除了a以外的所有字符
[^abc]* 表示匹配除了a、b、c以外的所有字符,注意这里不是abc字符串,而是a、b、c任何一个字符都不匹配

当我们要不匹配某个字符串或者中文词组的时候,可以这样用
((?!天空).)* 这个表示匹配出'天空'之外的所有字符
事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配。每个空字符都会检查其前面的字符串是否不是'天空',如果不是,这.(点号)就是匹配捕捉这个字符。表达式(?!天空).只执行一次,所以,我们将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配0次或多次,这种正则表达式的“查找”也叫做“zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断

import re
string = '太阳天空照,花儿对我笑'
result = re.findall(r'^(?:(?!天空).)*?花儿.*$', string)
print(result)
# []
string = '太阳空中照,花儿对我笑'
result = re.findall(r'^(?:(?!天空).)*?花儿.*$', string)
print(result)
# ['太阳空中照,花儿对我笑']
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值