我试图使用正则表达式做检查接受的字母和数字变量。这是我的定义:
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:
最后一个不应该被接受。。我做错了什么??你知道吗
search
方法为您给定的regex查找,如果找到,则返回一个Match
对象,这里1234qwer!!!
有[a-z0-9]
,但!!!!
没有。 试试a!!!
。这也将成为现实。 你可以试试re.search(r"[^a-z0-9]",word)
如果这个返回True
,那就意味着你的单词除了数字和字母表之外还有别的东西,应该被拒绝。你知道吗注:
^
表示不。你知道吗正则表达式搜索所做的只是检查是否至少有一个字符。你知道吗
如果要要求整个字符串只包含这些字符,则可以使用:
将模式锚定在字符串的开头和结尾,并且仅当中间的所有字符都在指定的字符集中时匹配。你知道吗
请注意,这也将匹配空字符串。如果希望至少需要一个字符,则可以将
*
更改为+
。你知道吗正则表达式唯一要做的就是检查字符串中是否有数字或字母。如果您想检查它是否只有数字和字母,您需要在开始和结束处锚定您的模式,并添加一个重复:
r'^[a-z0-9]+$'
但是请注意,没有必要为此使用regex:string
isalnum()
方法也会做同样的事情。你知道吗代码中还有一些奇怪的东西;您绝对不应该在函数签名中编译regex并传递结果搜索方法;也不应该显式地将结果转换为bool,也不应该将bools与
is True
进行比较。一个更具python风格的版本,假设您想坚持使用regex,应该是:还要注意
elif
本身就是一个语法错误。你知道吗相关问题 更多 >
编程相关推荐