托架之间的正则表达式

时间:2017-07-24 15:20:48

标签: c# regex

我有一个这样的字符串:

<random stuff between><random stuff between><random stuff between><random stuff between>

我已经可以使用此正则表达式匹配此字符串:

  if (Regex.IsMatch(arg, "^(<.+>){4}$"))
                return true;

但是如何通过使用正则表达式来获取括号之间的内容?

3 个答案:

答案 0 :(得分:4)

试试这段代码:

var source = "<abc><def><g><hij>";
var pattern = new Regex("<(?<content>[^>]+)>");

var content = pattern.Matches(source).Cast<Match>().Select(m => 
  m.Groups["content"].Value).ToArray();  


编辑如果您只需要4组,则可以使用此代码(来自@C Perkins评论):

var pattern = new Regex("^(<(?<content>[^>]+)>){4}$");
var content2 = pattern.Match(source).Groups["content"].Captures
                      .Cast<Capture>().Select(c => c.Value)
                      .ToArray();

答案 1 :(得分:2)

为了完整性,如果匹配被锚定并且恰好有4个组是重要的,那么您将必须明确重复这些组,您可以这样做:

^<(.+)><(.+)><(.+)><(.+)>$

虽然[^>]可能比.

更安全

然后,括号中的每段文字都将在您的匹配中的单独组中。

显然,当你后来决定需要有5场比赛,或50场比赛或可变数量的比赛时,这并不是非常灵活。在这种情况下,请使用Aleks&#39;答案。

最后,如果您的数据实际上是XML或类似的情况,那么最好不要使用正则表达式而是使用适当的解析器。

答案 2 :(得分:0)

使用以下代码,它将起作用。

        Regex regex = new Regex(@"[\w\s]+");

        string example = "<random stuff between><random stuff between>
                           <random stuff between><random stuff between><a><a 
                          a>";

        Match match = regex.Match(example);

        while (match.Success)
        {
            Console.WriteLine(match);
            match = match.NextMatch();
        }