有没有办法在 python 模式匹配中使用正则表达式?

Is there a way to use a regex inside a python pattern match?

这在支持模式匹配的函数式语言中很常见,所以我的直觉希望这是可能的。

我正在寻找类似的东西:

match string:
    case "[a-zA-Z]":
        ... do something 
    case _:
         print("Not a match")

即使没有直接的方法,是否有任何合理的语法来实现相同的目标?

Python 的 re 模块执行正则表达式,因此您可以使用 if-elif-else:

import re
string = "test_string"
if re.match("[a-zA-Z]", string):
    # string starts with a letter
elif re.match("[0-9]", string):
    # string starts with a digit
else:
    # string starts with something else

这意味着你在两个地方有可能的模式......但它与我目前能想到的问题的精神最接近。

import re

test = 'hello'

patterns = ['(h)', '(e)', '(ll)', '(ello)']

for pattern in patterns:
  matches = re.search(pattern, test)
  if matches:
    match pattern:
      case '(h)':
        print('matched (h)')
        # break # add a break after each case if you want to stop after a match is found.
      case '(e)':
        print('matched (e)')
      ...etc