我可以在正则表达式中声明匹配项的首选项吗?

时间:2012-01-21 10:26:30

标签: java regex

有没有办法在正则表达式中声明首选项? 例如,假设我有以下术语要搜索:

cat eats mouse

我有以下文字:

I saw yesterday a big mouse in our house. Why? We have a cat!A cat eats mouse.Right?

我想要一个与特定部分A cat eats mouse匹配的正则表达式 即虽然这些术语存在于其他部分,但这句话是更好的匹配,即它是首选。

但如果缺少这部分,它将与I saw yesterday a big mouse in our house匹配。或We have a cat

这可以用正则表达式表达吗?

3 个答案:

答案 0 :(得分:3)

不,正则表达式不是正确的工具。

您可以使用正则表达式(尽管普通子字符串搜索可能更合适)来查找您要查找的每个单词,并为匹配项指定权重(基于每个项的出现次数,所有项的外观) ,正则表达式之外的术语......的相对顺序。

但是你的最终目标太模糊了,而不是常规 - 你需要的不仅仅是正则表达式。

答案 1 :(得分:2)

我不确定您要应用哪种模式,但请注意,当使用竖线来编写替代项时,匹配的第一个模式将成功。这意味着,如果您有(<pattern1>|<pattern2>)之类的内容,如果它们都匹配,则会优先选择<pattern1>,因为这是第一个要检查的内容。

答案 2 :(得分:2)

正则表达式基本上用于匹配常规语言的单词,在大多数编程上下文中,匹配单词的部分然后被提取并在程序中使用。但是,您的匹配模式是上下文敏感的(匹配器需要记住以前的内容和接下来的内容),因此不能正则表达式的表达能力。

解决问题的方法可能是你使用句子标记器来提取句子,然后根据单词和最终的星座对每个句子进行评分。您的问题似乎与自动文本摘要问题密切相关。所以你可以查找相关信息。