我试图使用正则表达式检查变量是否接受了字母和数字。这是我的def:
def special_match(strg, search=re.compile(r'[a-z0-9]').search):
if bool(search(strg)) is True:
print ('Yes: ' + strg)
elif:
print ('nej: ')
while 1:
variabel = raw_input('Enter something: ')
special_match(variabel)
sys.exit()
似乎接受不允许符号与允许符号结合使用:
Enter something: qwerty
Yes: qwerty
Enter something: 1234
Yes: 1234
Enter something: !!!!
nej!
Enter something: 1234qwer!!!!
Yes: 1234qwer!!!!
Enter something:
不应该接受最后一个..我做错了什么?
答案 0 :(得分:1)
search
方法查找您提供的正则表达式,如果找到,则返回Match
对象1234qwer!!!
[a-z0-9]
!!!!
但a!!!
没有。
试试re.search(r"[^a-z0-9]",word)
。这也将返回True。
你可以试试
True
如果这返回^
,则表示您的单词具有除数字和字母之外的其他内容,并且应该被拒绝。
注意:{{1}}表示不是。
答案 1 :(得分:1)
所有正则表达式搜索正在检查是否至少存在一个字符。
如果您想要求整个字符串只包含这些字符,那么您可以使用:
r'^[a-z0-9]*$'
将模式锚定在字符串的开头和结尾处,并且仅当两者之间的所有字符都在指定的字符集中时才匹配。
请注意,这也将匹配空字符串。如果您希望至少需要一个字符,则可以将*
更改为+
。
答案 2 :(得分:1)
正则表达式唯一能做的就是检查字符串中是否有数字或字母。如果您要检查仅是否包含数字和字母,则需要在开始和结束时锚定您的模式,然后添加重复:r'^[a-z0-9]+$'
请注意,不需要为此使用正则表达式:字符串isalnum()
方法将执行相同的操作。
您的代码中还有其他一些奇怪的东西;你绝对不应该在函数签名中编译正则表达式并传递生成的搜索方法;你也不应该明确地将结果转换为bool,你不应该将bool与is True
进行比较。一个更Pythonic版本,假设你想坚持正则表达式,将是:
def special_match(strg, search=None):
if not search:
search = re.compile(r'[a-z0-9]').search
if search(strg):
print ('Yes: ' + strg)
else:
print ('nej: ')
另请注意elif
本身就是语法错误。