我有一个简短的问题,到目前为止我还没有找到解决方案。 我正在使用Pygame开发一个小应用程序,我需要确定用户按下的键盘键是否在某个范围之间,例如仅在A和F之间。为此,我正在使用正则表达式,如果用户按下字母或数字,它工作得很好。正则表达式之外的所有内容都将被忽略。 我的问题是当用户按下无字母数字键时,如空格,转义,箭头,当它们不在我的范围内时,它们会被正则表达式接受。
以下是一个例子:
import pygame, re
from pygame.locals import *
pygame.init()
size = width, height = 800, 480
screen = pygame.display.set_mode(size)
AppExit = False
while not AppExit:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
# check if pressed key is between A and F
keypressed = pygame.key.name(event.key)
isValidLetter = re.search('[a-f]', keypressed)
if isValidLetter is not None:
print(keypressed + " is between A and F")
pygame.display.update()
pygame.quit()
quit()
如果您运行此代码,例如按Escape键,您将在控制台中获得打印“ESCAPE介于A和F之间”。
我找不到如何排除这些键:(
有什么想法吗?
非常感谢!
答案 0 :(得分:2)
在口译员中尝试一下
re.search('[A-Z]', 'ESCAPE')
# --> <_sre.SRE_Match object; span=(0, 1), match='E'>
这不是无。这是因为A
中有C
,E
和两个ESCAPE
匹配。
你想要的是
re.match('^[A-Z]$', 'ESCAPE') # None
re.match('^[A-Z]$', 'E') # match object
因为^
匹配字符串的开头,$
匹配字符串的结尾。
答案 1 :(得分:2)
只需使用event.unicode
属性而不是pygame.key.name(event.key)
:
keypressed = event.unicode