C# 确定字符串的模式

C# 确定字符串的模式,c#,C#,我需要帮助开发一个逻辑来帮助我确定字符串的模式(3种不同的模式) 模式#1的几个示例: 这组字符串的模式很简单: [value][pipe+letter][value][pipe+letter][value](可能会重复) 模式#2的几个示例: 这组字符串的模式为: [value][pipe+letter][key][value][pipe+letter][key]并且可能会重复 注意:要区分p2#s3和p1#s3是,在模式1中,最小数量的|是2,但在模式2中,您可以只有一个| 模式#3的几个示

我需要帮助开发一个逻辑来帮助我确定字符串的模式(3种不同的模式)

模式#1的几个示例:

这组字符串的模式很简单:

[value][pipe+letter][value][pipe+letter][value]
(可能会重复)

模式#2的几个示例:

这组字符串的模式为:

[value][pipe+letter][key][value][pipe+letter][key]
并且可能会重复

注意:要区分
p2#s3
p1#s3
是,在模式1中,最小数量的|是2,但在模式2中,您可以只有一个|

模式#3的几个示例:

这组字符串的模式类似于模式#2,但是在字符串的开头将有一个
组名
组名
只会出现一次,并且没有空格

[Group][Value][Pipe+letter][Key]
[Value][Pipe+letter][Key]
部分可以重复多次

现在,我的程序将从数据源随机读取一个字符串,并且已知该字符串将属于这些模式中的一种,那么我的应用程序是否有任何方法可以识别该字符串属于哪个模式

i、 e:

我曾想过使用正则表达式,但我不擅长,我认为这个问题可能太复杂了

更新:根据Matt的建议,几乎不可能判断
ORANGE
LIGHT
是否是组名的一部分。我提供的数据是20世纪60年代的,所以我不希望有一个程序能百分之百地解决这个问题。如果我能得到帮助,使用正则表达式过滤掉80%的数据,那就足够了。我可以手动处理剩下的20%

例如,如果(inputString)不匹配任何模式,或者有冲突的模式,我们将为其赋值99(类似于dump)


对我来说,听起来像是正则表达式!我在正则表达式方面没有足够的经验来回答这个问题,但这听起来是正确的选择。所以你定义模式并检查匹配。。。不确定您面临什么问题(因为没有代码显示您尝试了什么)。。。如果你不想擅长某件事——付钱给别人去做——这可能不是解决你问题的好办法。那么你如何区分模式3和模式2的第一个和第三个示例之间的区别呢?您如何知道
ORANGE
LIGHT
是值的一部分而不是组名?“我认为你实际上没有足够的信息来说明两者之间的区别。”马特伯兰我完全同意你的看法。目前,我唯一能做的就是对一些
if
条件进行硬处理,使某些数据进入模式2,而其他数据进入模式3。但我希望使用regex来帮助我,至少过滤掉80%的数据,然后我会手动将其余的20%重定向到它们各自的模式。对所有人来说:这些是20世纪60年代的遗留数据,我上面提供的示例是数据库中“最好”的数据之一。(在格式、长度、准确性等方面)
string p1_s1 = "49.7|d 1.70|n 354.3|d 3.272|n 18|r 1808"
string p1_s2 = "51.7|d 3.177|n 18|r 1808"
string p1_s3 = "45.2|d 4.29|n 50"
string p1_s4 = "BLUE|c DARK GREEN|c WHITE
string p2_s1 = "ORANGE RED |m RHS 53A BLUE |m RHS 53A"
string p2_s2 = "46.9|d 6 4.574|n 15 15.7|r 1010  48.6|d 6.322"
string p2_s3 = "LIGHT GREEN |m  7.5GY 5/6"
string p3_s1 = "CLR DRBR|r 0004  BLCK|r 0006  WHIT|r 0006"
string p3_s2 = "WGT WHGN|c 0004 YLGN|c 0006"
string p3_s3 = "296  312|d 0004  137.2|n 0006"
string p3_s4 = "HGT SH|r 0004"
string p3_s5 = "ANLP  ANLP1 PNPL|r 0004"
if (inputString == //Pattern#1)
return 1;