Python 正则表达式拒绝任何不包含这些字符的字符串?
我想创建一个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 问题是我不知道正是这个正则表达式 解决方案 因为我还不能回答我自己的
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个错误字符。