我有一个这样的字符串:
<random stuff between><random stuff between><random stuff between><random stuff between>
我已经可以使用此正则表达式匹配此字符串:
if (Regex.IsMatch(arg, "^(<.+>){4}$"))
return true;
但是如何通过使用正则表达式来获取括号之间的内容?
答案 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();
}