使用正则表达式匹配所有组,包括自己的分隔符?

时间:2013-07-31 21:22:39

标签: c# regex

我的匹配标记字符串是

> token >

所以>之间的任何文字>是一场比赛。

我的字符串可以是任何东西,例如:

(random text) > (some token) > (some token) > (random text)

所以使用示例文本

impossible 1 > possible 2 > possible 3 > impossible 4

我需要所有可能的比赛。

正则表达式

\>(.*)\>

仅匹配一个组

possible 2 >  possible 3

当我需要以下比赛时

possible 2 > possible 3
possible 2
possible 3

2 个答案:

答案 0 :(得分:3)

除非我误解,否则这里似乎没有必要使用正则表达式。

string input = "(random text) > (some token) > (some token) > (random text)";
List<string> splitList = input.Split('>').ToList();

//(optional) place the original input string at the beginning 
//like a regex group match would have 
splitList.Insert(0, input);

答案 1 :(得分:0)

您可以使用此模式找到所有允许的元素:

@"(?=(>[^>]+)>)"

然后,您可以使用循环创建所需的所有组合。

示例:

string subject = "text > token 1 > token 2 > token 3 > token 4 > text";
string pattern = @"(?=(>[^>]+)>)";
Match m = Regex.Match(subject, pattern);
List<string> items = new List<string>();
while (m.Success)
{
    items.Add(m.Groups[1].ToString());
    m = m.NextMatch();
}
List<string> results = new List<string>();

for (int i = 0; i < items.Count(); i++)
{
    string temp = "";
    for (int j = i; j < items.Count(); j++)
    {
        temp += items[j];
        results.Add(temp + '>');
    }
}
results.ForEach(Console.WriteLine);