在match case语句中是否有一种使用endswith/startswith的方法?

6
有没有办法使用匹配大小写的方法来选择字符串的结尾/开头,就像下面这样?
match text_string:
  case 'bla-bla':
    return 'bla'
  case .endswith('endofstring'):
    return 'ends'
  case .startswith('somestart'):
    return 'start'
1个回答

11
你离正确很近了。你想在一个匹配任何内容的模式上放置一个条件守卫
match text_string:
  case 'bla-bla':
    return 'bla'
  case s if s.endswith('endofstring'):
    return 'ends'
  case s if s.startswith('somestart'):
    return 'start'

这并不比以下内容更有优势。

if text_string == 'bla-bla':
  return 'bla'
elif text_string.endswith('endofstring'):
  return 'ends'
elif text_string.startswith('somestart'):
  return 'start'

除非你同时使用match并想要区分两个完全相同的模式。


这只是一个过于简化的例子。我有一个匹配案例,其中大约有20个不同的情况,其中一些具有多个值。因此,这将有助于澄清和维护代码,特别是当我有多个特定情况的结尾时。谢谢。 - Ilya
@Ilya 如果这个答案解决了你的问题,你应该接受它作为有效答案;-) - Iacopo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接