关于rompile返回true和false,不允许使用符号

2024-05-15 01:14:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用正则表达式做检查接受的字母和数字变量。这是我的定义:

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: 

最后一个不应该被接受。。我做错了什么??你知道吗


Tags: search定义match字母符号数字somethingyes
3条回答

search方法为您给定的regex查找,如果找到,则返回一个Match对象,这里1234qwer!!![a-z0-9],但!!!!没有。 试试a!!!。这也将成为现实。 你可以试试

re.search(r"[^a-z0-9]",word) 如果这个返回True,那就意味着你的单词除了数字和字母表之外还有别的东西,应该被拒绝。你知道吗

注:^表示不。你知道吗

正则表达式搜索所做的只是检查是否至少有一个字符。你知道吗

如果要要求整个字符串只包含这些字符,则可以使用:

r'^[a-z0-9]*$'

将模式锚定在字符串的开头和结尾,并且仅当中间的所有字符都在指定的字符集中时匹配。你知道吗

请注意,这也将匹配空字符串。如果希望至少需要一个字符,则可以将*更改为+。你知道吗

正则表达式唯一要做的就是检查字符串中是否有数字或字母。如果您想检查它是否只有数字和字母,您需要在开始和结束处锚定您的模式,并添加一个重复:r'^[a-z0-9]+$'

但是请注意,没有必要为此使用regex:stringisalnum()方法也会做同样的事情。你知道吗

代码中还有一些奇怪的东西;您绝对不应该在函数签名中编译regex并传递结果搜索方法;也不应该显式地将结果转换为bool,也不应该将bools与is True进行比较。一个更具python风格的版本,假设您想坚持使用regex,应该是:

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本身就是一个语法错误。你知道吗

相关问题 更多 >

    热门问题