有没有办法在 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
这在支持模式匹配的函数式语言中很常见,所以我的直觉希望这是可能的。
我正在寻找类似的东西:
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