正则表达式从"A vs B"列表中提取团队名称

new*_*bie 0 c# regex

我有这样的用户输入

paul vs Team Apple Orange
Team Apple Orange vs paul
Team Apple Orange v.s. paul
Run Code Online (Sandbox Code Playgroud)

我需要编写一个正则表达式来检测分隔符两边的单词(vs,vs.,vs),并将关键字"team"的一侧存储到变量团队,将另一个存储到名称.

name = "paul"
team = "Apple Orange"
Run Code Online (Sandbox Code Playgroud)

cle*_*tus 5

尝试这个非常粗糙的程序:

string[] tests = new string[] {
  "paul vs Team Apple Orange",
  "Team Apple Orange vs paul",
  "Team Apple Orange v.s. paul"
};

foreach (string line in tests)
{
  string pattern = "(?:Team )?(.*?)\\s+(?:vs|v\\.s\\.)\\s+(?:Team )?(.*)";
  Regex regex = new Regex(pattern);
  Match match = regex.Match(line);
  Console.WriteLine(line);
  if (match.Success)
  {
    string team1 = match.Groups[1].Value;
    string team2 = match.Groups[2].Value;
    Console.WriteLine("Team 1 : " + team1);
    Console.WriteLine("Team 2 : " + team2);
  }
  else
  {
    Console.WriteLine("No match found");
  }
  Console.WriteLine();
}
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

输出:

paul vs Team Apple Orange
Team 1 : paul
Team 2 : Apple Orange

Team Apple Orange vs paul
Team 1 : Apple Orange
Team 2 : paul

Team Apple Orange v.s. paul
Team 1 : Apple Orange
Team 2 : paul
Run Code Online (Sandbox Code Playgroud)

编辑:如果你想允许"vs." 和"vs"正确匹配只是将表达式更改为:

string pattern = "(?:Team )?(.*?)\\s+(?:v\\.?s\\.?)\\s+(?:Team )?(.*)";
Run Code Online (Sandbox Code Playgroud)

第一个版本只能在"vs"或"vs"上正确匹配.