代表两个参与者相互比赛的足球队的正则表达式

Regex for football teams representing two participants playing against each other

我的任务是:

EventName is a string representing two participants playing against each other.

我在想如何使用数据注释来做到这一点。到目前为止我有这个:

    [RegularExpression("^[^0-9]+$", ErrorMessage = "Name cannot contain numbers")]
    [Required, MinLength(10), MaxLength(150)]

我认为我应该只允许在这两个团队之间使用 1 个分隔符(“-”“:”或 space)。其他任何事情都不应该被允许。没有特殊字符,没有数字。

有人能给我指出正确的方向吗?

还有谁知道足球队的名字中是否可以包含数字?

类似于 Villa1874 - Levski1914 吗?

允许单个分隔符(:-或单个白色-space,任何可以被白色-space包围)和numbers/underscores 在团队名称中:

^\w+ *[ -:] *\w+$

解释:

  • ^ 断言行首的位置
  • \w+匹配任何单词字符(等于[a-zA-Z0-9_])(1个或多个)
  • * 匹配任何白色-space(0 个或更多)
  • [ -:] 匹配列表中存在的单个字符
  • * 匹配任何白色-space(0 个或更多)
  • \w+匹配任何单词字符(等于[a-zA-Z0-9_])(1个或多个)
  • ^ 断言行尾的位置

测试:https://regex101.com/r/gBZDLE/6

如果您不想在团队名称中使用数字或下划线,您可以将 \w 替换为 [A-Za-z]

^[A-Za-z]+ *[ -:] *[A-Za-z]+$

测试:https://regex101.com/r/gBZDLE/7

前面不允许在团队名称中使用 spaces。为此,您可能需要匹配 [A-Za-z]+(?: [A-Za-z]+)*。这将匹配任何以字母字符开头并包含一个或多个由单个 space 分隔的单词的名称(例如“Manchester”或“Manchester United”)。完整的正则表达式:

^[A-Za-z]+(?: [A-Za-z]+)* *[ -:] *[A-Za-z]+(?: [A-Za-z]+)*$ 测试:https://regex101.com/r/gBZDLE/5

[A-Za-z]+(?: [A-Za-z]+)的解释:

  • [A-Za-z]+ 匹配单个字母字符(+ 一次或多次)
  • (?: [A-Za-z]+) 非捕获组 (?: ),匹配单个白色-space 后跟字母字符一次或多次 [A-Za-z]+