在Python / Pygame中使用正则表达式来识别keypressed

时间:2018-06-06 10:44:24

标签: python regex pygame

我有一个简短的问题,到目前为止我还没有找到解决方案。 我正在使用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之间”。

我找不到如何排除这些键:(

有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:2)

在口译员中尝试一下

re.search('[A-Z]', 'ESCAPE')
# --> <_sre.SRE_Match object; span=(0, 1), match='E'>

这不是无。这是因为A中有CE和两个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