从字符串中提取可变长度的代码

本文关键字:代码 字符串 提取 | 更新日期: 2023-09-27 18:19:58

我有以下字符串,

string fileName = "mnb_CREDUV_151030.csv"

我还得到了一个字符串,它是"mnb_CRED"。我需要对fileName做的是获取代码位,即"CREDUV"。它可能比CRED多出2个字符。对此,最好的方法是什么?

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

从字符串中提取可变长度的代码

您可以使用正则表达式来捕获两个下划线之间的内容,或者一个下划线和字符串末尾之间的内容:

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获取捕获的文本时,才会生成字符串。

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