需要帮助c#Regex

时间:2014-09-23 08:27:28

标签: c# regex

我正在尝试使用与以下四个字符串中的所有字符串匹配的命名组创建一个正则表达式:

var club = "Real Madrid";
var city = "Madrid";
var nation = "Spain";

var string1 = club;
var string2 = club + "," + city;
var string3 = club + "(" + nation + ")";
var string4 = club + "," + city + "(" + nation + ")";

或换句话说: 字符串看起来像"club,city(nation)",其中city和nation是可选的,包含可选的空格。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

^(?<club>[^,]+)(?:,(?<city>[^\(]+))?(?:\((?<nation>[^\)]+)\))?$

我认为这将符合您所有字符串的目的。

演示:http://regex101.com/r/nV7pT7/2

答案 1 :(得分:0)

来自aelor的正则表达式但添加了一个“(”符号“^(?[^,”以匹配字符串“皇家马德里(西班牙)”

也添加了一个代码示例。

var strings = new List<string>() { "Real Madrid", "Real Madrid,Madrid", "Real Madrid(Spain)", "Real Madrid,Madrid(Spain)" };

foreach (var str in strings)
{
    var match = Regex.Match(str, @"^(?<club>[^,]+)(?:,(?<city>[^\(]+))?(?:\((?<nation>[^\)]+)\))?$");

    var name = match.Groups["club"].Value;
    var city = match.Groups["city"].Value;
    var country = match.Groups["nation"].Value;
}