Регулярное выражение в Python / Pygame для идентификации нажатой клавиши - PullRequest
0 голосов
/ 06 июня 2018

У меня быстрый вопрос, для которого я до сих пор не нашел решения.Я работаю над небольшим приложением, использующим Pygame, для которого мне нужно определить, находится ли нажатая пользователем клавиша на клавиатуре между определенным диапазоном, например, только между A и F.Для этого я использую регулярное выражение, и оно прекрасно работает, если пользователь нажимает букву или цифру.Все, что находится за пределами регулярного выражения, игнорируется.Моя проблема заключается в том, что когда пользователь нажимает не буквенно-цифровую клавишу, например пробел, escape, стрелки, поскольку, хотя они не находятся в моем диапазоне, они принимаются регулярным выражением.

Вот пример:

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 голосов
/ 06 июня 2018

Просто используйте атрибут event.unicode вместо pygame.key.name(event.key):

keypressed = event.unicode
0 голосов
/ 06 июня 2018

хорошо, попробуйте в интерпретаторе

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

, который не является None.Это потому, что есть A, C и два E s в ESCAPE, которые совпадают.

То, что вы хотите, это

re.match('^[A-Z]$', 'ESCAPE')  # None
re.match('^[A-Z]$', 'E')  # match object

, начиная с ^соответствует началу строки, а $ соответствует концу строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...