Java中带有输入数据集的正则表达式匹配规则集
我正在研究一个有两个输入集的问题
输入1:
多套规则(示例):
规则集1:
1. I am $name
2. I am $age years old
3. $bookname is my favorite book
....
规则集2:
1. I love $sportname
2. $color is my favorite color
....
规则集3:
1. $fruit is my favorite fruit
2. I am a $diet
3. I speak $language
4. I am from $countryname
....
这里是$name,$age,$bookname。。。是占位符。可能有多个这样的规则集。没有限制
输入2:
多组输入字符串
设置1:
1. I am 26 years old
2. I am James
.....
第二组:
1. I am John
2. ToKillAMockinBird is my favorite book
.......
第三组:
1. TuesdaysWithMorrie is my favorite book
2. I am Bill
3. I am 26 years old
......
第四组:
1. I am Jack
2. I am 27 years old
3. WarAndPeace is my favorite book
......
第五组:
1. I am a vegan
2. I speak English
......
第6组:
1. Purple is my favorite color
2. I love football
......
问题陈述:
对于输入2中的每一组字符串,我需要与输入1匹配,并说明这些字符串是否以相同的顺序出现
输出:
Set1 --> false
Set2 --> true
Set3 --> false
Set4 --> true
Set5 --> true
Set6 --> false
我尝试了蛮力,迭代每个输入集中的每个字符串,检查它是否存在,如果存在,给它们一个数字,最后检查这些数字是否按升序排列。但是,这并不高效。输入Set1、set2可能是巨大的数据集。有没有更好的办法解决这个问题
# 1 楼答案
这里有一个想法:将规则集和输入集中的行连接成一行,使用一些特殊的分隔符(或交替使用一个周围的模式)
所以规则集#1可以是这样的
I am $name ### I am $age years old ### $bookname is my favorite book
或者像这样
[I am $name] [I am $age years old] [$bookname is my favorite book]
然后可以对输入集执行相同的操作并进行比较。在我看来,用regex
\w+
替换占位符可能就足够了