有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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. # 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+替换占位符可能就足够了