-4

我匹配的令牌字符串是

> 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
4

2 回答 2

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);
于 2013-07-31T21:46:57.947 回答
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);
于 2013-07-31T21:29:05.680 回答