取一段REGEX并将其设置为String

时间:2013-12-27 16:40:04

标签: c# regex

有没有办法从正则表达式中脱颖而出?假设我有一个匹配

\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)

我希望像这样改变它

Regex.Replace(line, @"\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)", "$1 $2($3)  // $4", RegexOptions.IgnoreCase);

我有什么方法可以单独抓取$4并将其设置为等于某个string变量?

假设正则表达式匹配为:string (55) ;comment

在这种情况下,我只想获得单词comment并将其设置为字符串而不通过String.Split函数。但最终,我只想得到括号之间的数字。

2 个答案:

答案 0 :(得分:2)

Replace方法有overloadMatchEvaluator代表:

string pattern = "...";
string result = Regex.Replace(line, pattern, m =>
{
    int digits = 0;
    string comment = m.Groups[4].Value; // $4

    int.TryParse(m.Groups[3].Value, out digits); // $3

    return string.Format("{0} {1}({2})  // {3}", 
        m.Groups[1].Value, m.Groups[2].Value, digits, comment);
}, RegexOptions.IgnoreCase);

希望这有帮助。

答案 1 :(得分:0)

是的,如果我正确理解了这个问题:

var re = new Regex(@"\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)");

var match = re.Match(input);

if (match.Success)
{
    int i = match.Groups[4].Index;
    int n = match.Groups[4].Length;
    input = input.Substring(0, i) + replacementString + input.Substring(i + n);
}