C#Regex如何捕获* |之间的所有内容和| *?

时间:2011-09-15 21:52:50

标签: c# regex

在C#中,我需要在短语* |​​ variablename | *。

中捕获variablename

我有这个RegEx:Regex regex = new Regex(@"\*\|(.*)\|\*");

在线正则表达式测试者返回“variablename”,但在C#代码中,它返回* | variablename | *,或包含星号和条形字符的字符串。任何人都知道我为什么会遇到这个回报值?

非常感谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace RegExTester
{
    class Program
    {
        static void Main(string[] args)
        {
            String teststring = "This is a *|variablename|*";
            Regex regex = new Regex(@"\*\|(.*)\|\*");
            Match match = regex.Match(teststring);
            Console.WriteLine(match.Value);
            Console.Read();
        }
    }
}

//Outputs *|variablename|*, instead of variablename

1 个答案:

答案 0 :(得分:12)

match.Value包含整个匹配。这包括自您在正则表达式中指定它们以来的分隔符。当我使用RegexPal测试您的正则表达式并输入时,会突出显示*|variablename|*

您只想获取捕获组(括号中的内容),因此请使用match.Groups[1]

String teststring = "This is a *|variablename|*";
Regex regex = new Regex(@"\*\|(.*)\|\*");
Match match = regex.Match(teststring);
Console.WriteLine(match.Groups[1]);