Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 取一段正则表达式并将其设置为字符串_C#_Regex - Fatal编程技术网

C# 取一段正则表达式并将其设置为字符串

C# 取一段正则表达式并将其设置为字符串,c#,regex,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(55);评论 在这种情况下,我希望只

有没有办法从正则表达式中提取一部分?假设我有一个匹配的

\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)
我想这样改变它

Regex.Replace(line, @"\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)", "$1 $2($3)  // $4", RegexOptions.IgnoreCase);
我有没有办法自己获取
$4
并将其设置为某个
字符串
变量

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


在这种情况下,我希望只获取单词
注释
,并将其设置为字符串,而不必使用string.Split函数。不过,最后,我只想得到括号之间的数字。

是的,如果我理解正确的话:

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);
}
Replace
方法有一个函数,它接受一个
MatchEvaluator
委托:

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);

希望这能有所帮助。

不知道你在问什么。你能提供一个输入和输出的例子吗?我做了一个编辑,有更多的解释。一个期望输出的例子将非常有用。