在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
答案 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]);