所以我不知道我的正则表达式出了什么问题。(原始对话包括对这些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-]做什么。看起来有点奇怪。我认为这可能是无效的,但我不确定。
我的解决方案假设在标记的单词之间只有一个空格,而没有其他空格。