我正在尝试根据一些已知文本生成正则表达式。我假设我可以将文本加载到树结构中,看看生成了哪种树,但我有一个问题,我似乎无法弄明白:我希望表兄弟能够连接在一起。
例如:
ZABCDEF
ZBCCEFG
会导致:
A-B- D-E-F Z- C- B-C- E-F-G
我不希望进行任何排序,因为目标是按原样匹配文本。任何提示都将非常受欢迎。
答案 0 :(得分:1)
从您编写的结果树中更容易知道您想要使用哪种类型的正则表达式,但我认为树比您需要的更多。
假设您希望相同的值成为正则表达式的锚点,那么您需要做的就是跟踪字符串中特定索引处的字符是否相同。这可以通过几种数据类型进行跟踪,但最容易解释的只是一个布尔值数组(如果所有字符串长度不同,那么你希望布尔数组的长度是第二大的大小字符串,不是最大的(没有任何东西会匹配它的尾随字符)。默认情况下,它们被初始化为false,然后你可以循环遍历给定的字符串,当索引中的所有字符都相同时,将布尔值设置为true。 / p>
然后使用所有字符串中相同的字符构建正则表达式,您可以检查布尔数组以查看是否可以将值直接放入表达式中,或者是否需要处理不同字符串之间的选择...请注意,此处理也可以只是内联,没有真正需要跟踪数据并再次处理字符串。
如果这是正确的方向,或者如果您可以提供更多信息以便向我们发送正确的方向,我可以回来写一些代码。
编辑:只需要一些代码来解释我在说什么
string s1 = "ZABCDEF";
string s2 = "ZBCCEFG";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s1.Length; ++i)
{
if (s1[i] == s2[i])
{
sb.Append(s1[i]);
Console.WriteLine(" " + s1[i]);
}
else
{
sb.Append("[" + s1[i] + s2[i] + "]");
Console.WriteLine(s1[i] + " " + s2[i]);
}
}
Console.WriteLine(sb);
垂直输出图表以及与任一字符串匹配的结果表达式。
Z
A B
B C
C
D E
E F
F G
Z[AB][BC]C[DE][EF][FG]
答案 1 :(得分:0)
这不是一个叫做跳过列表的东西吗?