我想知道我是否可以在Python中使用大小写匹配来匹配字符串--也就是说,字符串是否包含大小写匹配。例如:
mystring = "xmas holidays" match mystring: case "holidays": return true case "workday": return false
我能理解为什么不能,因为这可能同时匹配几个病例,但我想知道这是否可能。
j5fpnvbx1#
在match语句中,strings are compared using == operator意味着case模式必须完全等于match表达式(本例中为mystring)。为了解决这个问题,您可以建立自订类别,继承自str并覆写__eq__方法。这个方法应该委派给__contains__。
match
==
case
mystring
str
__eq__
__contains__
>>> class MyStr(str): ... def __eq__(self, other): ... return self.__contains__(other) ... >>> >>> mystring = MyStr("xmas holidays") >>> match mystring: ... case "holiday": ... print("I am here...") ... I am here...
rfbsl7qr2#
您可以使用[*_]通配符序列捕获模式:https://peps.python.org/pep-0622/#sequence-patterns
[*_]
def is_holiday(yourstring: str): match yourstring.split(): case [*_, "holidays"]: return True case [*_, "workday"]: return False print(is_holiday("xmas holidays"))
2条答案
按热度按时间j5fpnvbx1#
在
match
语句中,strings are compared using==
operator意味着case
模式必须完全等于match
表达式(本例中为mystring
)。为了解决这个问题,您可以建立自订类别,继承自
str
并覆写__eq__
方法。这个方法应该委派给__contains__
。rfbsl7qr2#
您可以使用
[*_]
通配符序列捕获模式:https://peps.python.org/pep-0622/#sequence-patterns