我是一名实习生,我正在开发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);
}
}
但是我不明白为什么控制台。