正则表达式不匹配某字符串的情况
正则表达式中,如果想要不匹配某个字符可以使⽤如下
[^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)
# ['太阳空中照,花⼉对我笑']
⽐如我们要匹配今天的天⽓,⽽不是明天的。即要匹配除tomorrow以外的单词
import re正则匹配特定字符串
s1 = 'how is the weather today'
s2 = 'how is the weather tomorrow'
regex = r'(^.*weather(?:(?!tomorrow).)*$)'
result1 = re.findall(regex, s1)
result2 = re.findall(regex, s2)
print('result1: ', result1)
print('result2: ', result2)
# result1: ['how is the weather today']
# result2: []
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论