正则表达式将句子与混乱的单词匹配但保留句子顺序

时间:2015-09-04 11:01:58

标签: regex

我希望以这样的方式匹配句子:句子中的单词可以是任何顺序,但句子应该是相同的顺序。

e.g。

  

我叫萨姆。我喜欢正则表达式。

可接受的输入:

My Sam is name. regex I love.
name is My Sam. I regex love.

输入无效:

I love regex. My name is Sam.
regex I love. is My name Sam.

示例正则表达式我到目前为止已经解决了上述问题

^((?=.*\bMy\b)(?=.*\bSam\b)(?=.*\bis\b)(?=.*\bname\b))((?=.*\bregex\b)(?=.*\bI\b)(?=.*\blove\b)).*$

哪个没有按预期工作。

正则表达式可以解决这个问题吗?建议的解决方法是什么?

注意:请忽略.我为了清楚起见而使用它。

2 个答案:

答案 0 :(得分:0)

我认为你正在寻找除正则表达式之外的其他东西。如果您想要这样做,最有效的方法是比较一系列预期的单词并检查'如果它们都出现在一个句子中。这完全取决于您使用的上下文。如果你需要一个字面上找到你在你的例子中所说的正则表达式,你可以使用像this这样的东西:

/(My|name|is|Sam) (My|name|is|Sam) (My|name|is|Sam) (My|name|is|Sam)\. (I|love|regex) (I|love|regex) (I|love|regex)./g

但正如你所看到的,这个正则表达式会随着你的句子所用的单词越多而呈指数级增长。而且,与用其他东西解析它相比,效率非常低。

答案 1 :(得分:0)

我无法使用单个正则表达式实现,而是执行了以下操作:

  • 将句子实际划分为多个区块。

  • 维持句子块 - >正则表达式配置。

  • 正则表达式配置取决于适用于该句子块的规则。
  • 在句子上应用正则表达式以确定是否存在此类块。
  • 最后验证块是否以配置的顺序出现。