正则表达式 - 如何匹配一定数量的任意单词,后跟一个特定的单词

时间:2014-11-11 07:27:40

标签: java regex pattern-matching

我想知道是否有人可以帮我解决这个问题,我目前正试图进行一种模糊匹配。

基本上我不想从非结构化文本中获取关系,并确定这些关系的常见模式。然而,输入字符串有点随意 - 通常是人类产生的输入。

E.g。这两个输入字符串:

  

ENTITY通常比ENTITY

更大      

ENTITY ......还有一些其他词......大于ENTITY

我已成功将这两个字符串与以下正则表达式匹配:

  
    

(ENTITY)是(。+?(?=更大))大于(ENTITY)

  

但是从那以后。+?匹配到达更大的一切,在两者之间可以有任意数量的单词"是"并且"更大"。这导致在某些情况下的错误匹配,因此我想限制"单词的数量"介于"之间"和#34;更大"。

我将一个单词定义为至少一个非空格,后跟至少一个空白字符。我知道这实际上不是一个字,但出于我的目的,它应该没问题。如果我想匹配,例如最多5个字,这将是

  

(\ S + \ s +){0,5}

将此与前一个正则表达式相结合可以将我带到

  
    

(ENTITY)是((\ S + \ s +){0,5}?(?=更大))大于(ENTITY)

  

但这没有用。有人可以就此提出建议吗?我真的能与正则表达式匹配吗?

这是一个Java项目。为了便于阅读,我已经删除了正则表达式模式中的转义反斜杠。

1 个答案:

答案 0 :(得分:0)

这个正则表达式适合你:

^(ENTITY) is ((?:\S+\s+){0,5})bigger than \1$

RegEx Demo