从 TAG 格式创建更复杂的正则表达式
Creating more complex regexes from TAG format
所以我不知道我的正则表达式有什么问题。 (原始对话,其中包括对这些 TAG 格式的解释,可在此处找到:)。
我从这样的字符串开始:
Arms_NNS folded_VVN ,_,
NNS也可以是NN,VVN也可以是VBG。我只想找到那个和其他具有相同标签的字符串(NNS 或 NN 后跟 b VVN 或 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) )?,_,)
与 word_VVN / word_VBG 部分完全匹配,或者完全匹配。
您的一般问题:
我发现很难解释这些东西是如何工作的。我将尝试解释组成部分:
- \w 匹配单词字符 - 您通常希望在单词中找到的字符
- \w* 匹配其中的一个或多个
- (NN|NNS) 表示 "match NN or NNS"
- ?: 表示 "match but don't capture" - 建议谷歌搜索与正则表达式相关的捕获意味着什么。
- ?单独表示 "match 0 or 1 of the thing before me - so x? would match "" 或 "x" 但不是 "xx".
,_,中的- None个字符是特殊字符,因此我们只需将它们放入正则表达式中即可匹配它们。
正则表达式的一个问题是 \w 不匹配逗号(仅 "word characters")。
我不知道 [\w-] 是做什么的。看起来有点奇怪。我认为它可能无效,但我不确定。
我的解决方案假定在您的标记词之间只有一个 space,没有其他任何东西。
所以我不知道我的正则表达式有什么问题。 (原始对话,其中包括对这些 TAG 格式的解释,可在此处找到:
我从这样的字符串开始:
Arms_NNS folded_VVN ,_,
NNS也可以是NN,VVN也可以是VBG。我只想找到那个和其他具有相同标签的字符串(NNS 或 NN 后跟 b VVN 或 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) )?,_,)
与 word_VVN / word_VBG 部分完全匹配,或者完全匹配。
您的一般问题:
我发现很难解释这些东西是如何工作的。我将尝试解释组成部分:
- \w 匹配单词字符 - 您通常希望在单词中找到的字符
- \w* 匹配其中的一个或多个
- (NN|NNS) 表示 "match NN or NNS"
- ?: 表示 "match but don't capture" - 建议谷歌搜索与正则表达式相关的捕获意味着什么。
- ?单独表示 "match 0 or 1 of the thing before me - so x? would match "" 或 "x" 但不是 "xx". ,_,中的
- None个字符是特殊字符,因此我们只需将它们放入正则表达式中即可匹配它们。
正则表达式的一个问题是 \w 不匹配逗号(仅 "word characters")。
我不知道 [\w-] 是做什么的。看起来有点奇怪。我认为它可能无效,但我不确定。
我的解决方案假定在您的标记词之间只有一个 space,没有其他任何东西。