C# 字符串宏替换
我有一个VisualStudio2008C#.NET3.5应用程序,需要在其中解析宏 给定一个N位数的序列号,以及一个类似于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
%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 );
}