时间:2011-10-14 15:51:49

标签: c# regex string replace

我有一个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替换。

这样做最简单的方法是什么?

3 个答案:

答案 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()));
        }