我有以下字符串,
string fileName = "mnb_CREDUV_151030.csv"
我也给了一个字符串“mnb_CRED”。我需要对fileName做的是得到代码位,即“CREDUV”。它可能超过CRED超过2个字符。最好的方法是什么?
我打算在文件名中使用循环遍历每个字符并应用一些逻辑。想知道是否有更好的方法吗?
答案 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
获取捕获的文本时,才会生成字符串。
缺点是正则表达式是另一个需要学习的东西,显然,它们不是最简单的语言。