Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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_String_Replace - Fatal编程技术网

C# 字符串宏替换

C# 字符串宏替换,c#,regex,string,replace,C#,Regex,String,Replace,我有一个VisualStudio2008C#.NET3.5应用程序,需要在其中解析宏 给定一个N位数的序列号,以及一个类似于%SERIALNUMBER3%的宏,我希望此解析方法只返回序列号的前3位数字 string serialnumber = "123456789"; string macro = "%SERIALNUMBER3%"; string parsed = SomeParseMethod(serialnumber, macro); parsed = "123" 给定“%SERIA

我有一个VisualStudio2008C#.NET3.5应用程序,需要在其中解析宏

给定一个N位数的序列号,以及一个类似于
%SERIALNUMBER3%
的宏,我希望此解析方法只返回序列号的前3位数字

string serialnumber = "123456789";
string macro = "%SERIALNUMBER3%";
string parsed = SomeParseMethod(serialnumber, macro);

parsed = "123"
给定“%SERIALNUMBER7%”,返回前7位数字,以此类推

我可以使用
String.IndexOf
和一些复杂度来实现这一点,但我想知道是否有一个简单的方法。可能使用
Regex
replace


最简单的方法是什么?

使用
Regex
类。您的表达式将类似于:

@"%(\w)+(\d)%"

第一个捕获组是ID(在本例中为“SERIALNUMBER”),第二个捕获组是位数(在本例中为“3”)。

非常简单的示例:

static void Main(string[] args)
        {
            string serialnumber = "123456789";
            string macro = "%SERIALNUMBER3%";

            var match = Regex.Match(macro, @"\d+");

            string parsed = serialnumber.Substring(0, int.Parse(match.ToString()));
        }

你说的这个神奇的宏是什么?@leppie-他似乎是指两边都由
%
分隔的字符串。这可能是一个需要替换的标记。如果我理解正确,一个相对简单的regex.replace就可以了。SomeParseMethod()需要有多复杂。例如,SERIALNUMBER是您预期的唯一宏。如果你有其他人,你希望他们做什么样的操作?
var str = "%SERIALNUMBER3%";
var reg = new Regex(@"%(\w+)(\d+)%");
var match = reg.Match( str );
if( match.Success )
{
    string token = match.Groups[1].Value;
    int numDigits = int.Parse( match.Groups[2].Value );
}