Python 正则表达式拒绝任何不包含这些字符的字符串?

Python 正则表达式拒绝任何不包含这些字符的字符串?,python,regex,Python,Regex,我想创建一个python函数,该函数以单词为参数,并使用正则表达式包re拒绝包含除“0123456789:MF”和“\s”以外的任何字符的单词 结构: def function(word): pattern = re.compile('REGEXHERE') if pattern.match(word): return True else: return False 问题是我不知道正是这个正则表达式 解决方案 因为我还不能回答我自己的

我想创建一个python函数,该函数以单词为参数,并使用正则表达式包
re
拒绝包含除“0123456789:MF”和“\s”以外的任何字符的单词

结构:

def function(word):
    pattern = re.compile('REGEXHERE')
    if pattern.match(word):
         return True
    else:
         return False
问题是我不知道正是这个正则表达式

解决方案

因为我还不能回答我自己的问题,所以我在这里发布了@MartinBonner提供的解决方案,效果很好:

def function(word):
    return not re.compile('[^0-9::MF\\s]').search(word)

使用字符类。您的正则表达式应该是:

'[\\d:MF\\s]+'
为确保整个字符串匹配,请使用
^
$
将其包围:

'^[\\d:MF\\s]+$'

如果您指的是正则表达式保留字中的
\s
,请使用此选项

^[\d:MF\s]+$

缺少正则表达式是问题所在,我认为
if条件:return True否则return False
最好写为
return条件
。你是说
\s
正则表达式
\s
?他的意思是
返回模式。match(word)
。你不需要if语句,我会1。反转正在搜索的字符。2.反转测试(如果发现,则返回真值),3。使用
搜索
,而不是
匹配
。作为一行:
def函数(word):返回!重新编译(“[^0-9::MF\\s]”)。搜索(word)
这是一种效率低下的方法:与其匹配整个字符串以确保其所有字符都被接受,不如匹配不被接受的第一个字符accepted@Aaron这难道不能实现吗?匹配应该在
O(n)
时间内失败。嗯,所以我的理由很愚蠢,你是对的,两者都会很快失败/成功。我认为我的选项在内存方面稍微好一点,因为它只需要匹配一个字符,而您的选项必须在内存中保持匹配的字符串。我已经在regex101(/)上运行了一些测试,看起来我的选项在PCRE引擎中的性能通常更好。它还指出,它们与空字符串的行为方式不同,因为您的正则表达式保证至少一个正确字符,而我的正则表达式保证最多0个错误字符。