0

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

我从这样的字符串开始:

Arms_NNS 折叠_VVN ,_,

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

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

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

1 回答 1

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”
  • ?: 表示“匹配但不捕获” - 建议使用谷歌搜索捕获与正则表达式相关的含义。
  • ? 单独表示“匹配我面前的事物的 0 或 1 - 所以 x? 将匹配“”或“x”但不匹配“xx”。
  • ,_, 中的字符都不是特殊的,因此我们只需将它们放入正则表达式即可匹配它们。

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

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

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

于 2015-04-23T16:29:20.003 回答