从TAG格式创建更复杂的正则表达式

时间:2015-04-23 16:18:41

标签: regex tags absolute corpus phrase

所以我无法弄清楚我的正则表达式有什么问题。 (原始对话,包括对这些TAG格式的解释,可在此处找到:Translate from TAG format to Regex for Corpus)。

我开始使用这样的字符串:

  

Arms_NNS folded_VVN,_,

NNS也可以是NN,VVN也可以是VBG。我只想找到具有相同标签的其他字符串(NNS或NN后跟b VVN或VBG后跟逗号)。

以下正则表达式是我尝试使用的,但它找不到任何东西:

[\w-]+_(?:NN|NNS)\W+[\w-]+ _(?:VBG|VVN)\W+[\w-]+ _,

1 个答案:

答案 0 :(得分:0)

给定输入字符串

Arms_NNS folded_VVN ,_,

以下正则表达式

(\w+_(?:NN|NNS) \w+_(?:VBG|VVN) ,_,)

匹配整个字符串(并捕获它 - 如果您不知道这意味着什么,这可能意味着它对您无关紧要。)

给定一个更长的字符串(我编写的)

Dog_NN Arms_NNS folded_VVN ,_, burp_VV

它仍然匹配你想要的部分。

如果_VVN部分是可选的,您可以使用

(\w+_(?:NN|NNS) (?:\w+_(?:VBG|VVN) )?,_,)

匹配witout,或者只匹配一个word_VVN / word_VBG部分。

您的更一般性问题:

我发现很难解释这些事情是如何运作的。我将尝试解释组成部分:

  • \ w匹配单词字符 - 您通常希望在单词中找到的字符
  • \ w *匹配其中一个或多个
  • (NN | NNS)表示“匹配NN或NNS”
  • ?:表示“匹配但不捕获” - 建议使用Google搜索与正则表达式相关的捕获方式。
  • ?单独表示“在我之前匹配0或1 - 所以x?匹配”“或”x“但不匹配”xx“。
  • _中的所有字符都不是特殊的,所以我们可以将它们放在正则表达式中来匹配它们。

正则表达式的一个问题是\ w与逗号(仅“单词字符”)不匹配。

我不知道[\ w-]是做什么的。看起来有点奇怪。我认为它可能无效,但我不确定。

我的解决方案假设您的标记词之间只有一个空格,没有别的。