Поддерживает ли оператор match/case регулярные выражения?Python

Программы на Python
Anonymous
Поддерживает ли оператор match/case регулярные выражения?

Сообщение Anonymous »

В настоящее время я пишу текстовый редактор Python, который должен сопоставлять введенную строку с регулярным выражением. Я знаю, что могу использовать цепочку if/

Код: Выделить всё

elif/else
construct, but I'm wondering if I can shorten my code by using python 3.10's new match/

Код: Выделить всё

case конструкция. Однако вроде совпадает/case
в Python не поддерживает регулярные выражения. Может кто-нибудь сказать мне, как использовать совпадение/ для соответствия регулярным выражениям? Заранее спасибо! (Примечание: я новичок в сопоставлении/регистре в Python, поэтому, возможно, я принял совпадение/регистр Python за переключатель/регистр в других языках.)
Я пробовал следующее код, но вместо этого возвращает ошибку:

Код: Выделить всё

import re

def match_pattern(string):
match string:
case re.compile(r' *if +(? *.+ *)? *: *'):
return 'if'
case re.compile(r' *for +\w+ +in +(? *.+ *)? *: *'):
return 'for'
# and other cases
case _:
return 'invalid'

if __name__ == '__main__':
print(match_pattern('if (a == 0):'))
print(match_pattern(' for i in l:'))
возвратите следующую обратную трассировку:

Код: Выделить всё

Traceback (most recent call last):
File "match_case.py", line 16, in 
print(match_pattern('if (a == 0):'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "match_case.py", line 6, in match_pattern
case re.compile(r' *if +(? *.+ *)? *: *'):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: called match pattern must be a type
Может кто-нибудь объяснить, что здесь происходит?

Подробнее здесь: https://stackoverflow.com/questions/787 ... xpressions

Вернуться в «Python»