从string中提取可变长度的代码

时间:2015-10-30 12:48:32

标签: c# .net

我有以下字符串,

string fileName = "mnb_CREDUV_151030.csv"

我也给了一个字符串“mnb_CRED”。我需要对fileName做的是得到代码位,即“CREDUV”。它可能超过CRED超过2个字符。最好的方法是什么?

我打算在文件名中使用循环遍历每个字符并应用一些逻辑。想知道是否有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用regular expression捕获两个下划线或下划线和字符串末尾之间的内容:

var regex=new Regex("_(?<code>[A-Za-z0-9]+)(_|$)");

var x=regex.Match("mnb_CRED_sdfsd.sdf");
var code=x.Groups["code"].Value;
Debug.Assert(x.Groups["code"].Value=="CRED");

var x2=regex.Match("mnb_CRED");
Console.WriteLine(x2.Groups["code"].Value);

$表示字符串的结尾,因此模式将捕获第一个和第二个下划线之间或行尾的文本。

(?<code>\w+)模式匹配任何非空白字符(\ w +)并将名称code应用于它。这样可以轻松捕获模式的不同部分并使用名称访问它们。

正则表达式的优点在于它们比字符串拆分快得多,并且使用的内存要少得多,尤其是在处理大量字符串时。原因是匹配不会生成像拆分这样的临时字符串。匹配或组仅包含开始和结束索引。仅当您使用Value获取捕获的文本时,才会生成字符串。

缺点是正则表达式是另一个需要学习的东西,显然,它们不是最简单的语言。