我有一个Visual Studio 2008 C#.NET 3.5应用程序,我需要解析一个宏。
给定一个长度为N位的串行序列号和一个像%SERIALNUMBER3%
这样的宏,我希望这个解析方法只返回序列号的前3位数。
string serialnumber = "123456789";
string macro = "%SERIALNUMBER3%";
string parsed = SomeParseMethod(serialnumber, macro);
parsed = "123"
给定`%SERIALNUMBER7%,返回前7位等等。
我可以使用String.IndexOf
和一些复杂性来做到这一点,但我想知道是否有一个简单的方法。也许使用Regex
替换。
这样做最简单的方法是什么?
答案 0 :(得分:1)
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 );
}
答案 1 :(得分:0)
使用Regex
课程。你的表达将是这样的:
@"%(\w)+(\d)%"
您的第一个捕获组是ID(在本例中为“SERIALNUMBER”),您的第二个捕获组是位数(在本例中为“3”)。
答案 2 :(得分:0)
非常快速和肮脏的例子:
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()));
}