通过匹配正则表达式在列表中添加一个元素



我是一名实习生,我正在开发c#解决方案,该解决方案允许我从excel文件中检索单元格中的字符串。一旦这个字符串被检索到,这个字符串的元素必须使用正则表达式分成另外两个列表(样本和引用)。这意味着如果这个字符串的一个元素对应于正则表达式,它必须在"样本"中发送。列表,如果不对应,则必须在"参考列表"中发送。

几天来,我一直在尝试解决这个问题,但我无法显示"样本"。列表,其中的元素应该对应于正则表达式。无论显示整个列表还是不显示,它都不能正常工作。

字符串示例:

示例1:

QC4 1000 ppm ; C-191108-S-0095 ; C-191108-S-0095 ; QC4 100 ppm ; QC4 1000 ppm ; Et 500 ppm ; Et 1000 ppm ; Et 2000 ppm ;

Example2:

; C-210104-S-117 2 ; C-210104-S-118 1 ; C-210104-S-118 2 ; Ref 100ppm QC4 ; Ref 1000ppm QC4 ;

下面是我的代码:
public static (List<string> sample, List<string> reference) parse()
{
string imput = ReadExcel();
List<string> sample = new List<string>();
List<string> reference = new List<string>();
string pattern = @"C-[0-9][0-9][0-9][0-9][0-9][0-9]-S-[0-9][0-9][0-9][0-9] ;";
Regex rgx = new Regex(pattern);
Regex delim = new Regex(@"s*,s*");
foreach (string term in delim.Split(imput))
{
if (rgx.IsMatch(term))
{
sample.Add(term);
sample.ForEach(Console.WriteLine);
}
else
{
reference.Add(term);
}
}
return (sample, reference);
}

我不知道如何修理它。你能帮我吗?

谢谢你的理解。

如果你想要这个正则表达式:

C-[0-9][0-9][0-9][0-9][0-9][0-9]-S-[0-9][0-9][0-9][0-9] ;

匹配:

C-210104-S-117 2

你可以简单地使用这个正则表达式:

C-[0-9]{6}-S-[0-9]{3} [0-9]

我在regex101工具中放了一些例子

编辑:要拆分列表中的元素,我不会使用正则表达式,我会使用"。split "
myRow.Split(';')

编辑2:所以代码看起来像:

List<string> sample = new List<string>();
List<string> reference = new List<string>();
string pattern = @"C-[0-9]{6}-S-[0-9]{3}( [0-9])?";
Regex rgx = new Regex(pattern);
foreach (string term in input.Split(';').Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)))
{
if (rgx.IsMatch(term))
{
sample.Add(term);
sample.ForEach(Console.WriteLine);
}
else
{
reference.Add(term);
}
}

但是我不明白为什么控制台。

最新更新