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

问题描述:

有没有办法在正则表达式中声明优先
例如,假设我有以下的字词进行搜索:我可以在正则表达式中声明匹配项的首选项吗?

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.e.尽管这些术语存在于其他部分,但该句子更适合,即它是首选。

但是,如果这部分遗漏了,它会匹配I saw yesterday a big mouse in our house。或者We have a cat

这可以表达一个正则表达式吗?

+0

假设你可以把它写成一个正则表达式,我怀疑它会非常复杂,你最好通过使用一些正则表达式来让你清楚。 –

+0

@PeterLawrey:你说的话是有道理的,但是因为我不完全了解正则表达式的语法,所以我认为或许有一些习惯用法,就像它有条件语法或前瞻或lookbehind等。 – Cratylus

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

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

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

+0

@ Mat:+ 1有趣的想法! – Cratylus

我不确定你希望应用什么样的模式,但请注意,当使用竖线来编写替代方案时,匹配的第一个将成功。这意味着如果你有类似(<pattern1>|<pattern2>)的东西,如果它们都匹配,首选项将会给予<pattern1>,因为这是第一个将被检查的选项。

+0

+1我没有意识到! – Cratylus

正则表达式基本上用于匹配常规语言的单词,在大多数编程环境中,匹配单词的部分内容随后将被提取并用于程序中。然而,你的匹配模式是上下文敏感的(匹配器需要记住之前和之后会发生的事情),因此不在正则表达式的表达能力中。

你的问题的一种方法可能是你使用句子标记器来提取句子,然后根据单词和最终它们的星座对每个句子进行评分。您的问题似乎与自动文本摘要的问题高度相关。所以你可以在这里寻找信息。