C# 确定字符串的模式
我需要帮助开发一个逻辑来帮助我确定字符串的模式(3种不同的模式) 模式#1的几个示例: 这组字符串的模式很简单: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的几个示
[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;