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



所以我不知道我的正则表达式出了什么问题。(原始对话包括对这些TAG格式的解释,可以在这里找到:将TAG格式翻译为语料库的Regex)。

我从这样一个字符串开始:

Arms_NNS folded_VVN,_,

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

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

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

给定输入字符串

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">
  • ?:意思是"匹配但不捕获"——建议在谷歌上搜索捕获相对于正则表达式的含义
  • ?alone的意思是"匹配我之前的东西的0或1——所以x?会匹配"或"x",但不会匹配"xx">
  • _中的字符都不是特别的,所以我们只需将它们放在正则表达式中就可以进行匹配

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

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

我的解决方案假设在标记的单词之间只有一个空格,而没有其他空格。

最新更新