正则表达式中,如果想要不匹配某个字符可以使用如下
[^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: []