我试图制作一个与_TAG(_DT,_NN等)部分按照它们出现的顺序匹配句子的所有以下变体的正则表达式:
Her_PP$|DT noun_NN|NNS a_PP$|DT noun_NN|NNS
Her_PP$|DT adj_JJ noun_NN|NNS a_PP$|DT noun_NN|NNS
Her_PP$|DT noun_NN|NNS a_PP$|DT adj_JJ noun_NN|NNS
Her_PP$|DT adj_JJ noun_NN|NNS a_PP$|DT adj_JJ noun_NN|NNS
这是原始文本的显示方式,我只想突出显示匹配项。竖条|是指"或"在上下文中,所以请将它包含在正则表达式中,如正常"或。"
正如你所看到的,每一个的基本骨架都是Her_PP $ | DT noun_NN | NNS a_PP $ | DT noun_NN | NNS,其中散布着一些_JJ碎片。我想要一个正则表达式来捕获所有这些,但我似乎无法使用可选的字符串来工作。
_PP$|DT
并不总是跟_JJ
后面,所以我想将_JJ
设为可选,但每次都找不到_PP$|DT _NN
或_PP$|DT _JJ _NN.
这是我的字符串:
(\w+_(?:PP\$|DT)(?:\w+_JJ)(\w+__(?:NN|NNS)))
对于那些关心的人来说,_PP$
等是附加在单词末尾的词性标记(例如,NN表示"名词"所以你可能会看到&#34 34; dog_NN&#34)。
我很抱歉我是一个绝对的初学者,所以请耐心等待! :)
答案 0 :(得分:0)
(?:xyz)
表示匹配xyz
但不捕获它。
如果您想要制作可选内容,则必须将?
添加到该论坛。
在你的情况下..正则表达式将是
((\w+_(PP\$|DT)(\s\w+_JJ)*?(\s\w+_(NN|NNS))\s?){2})
答案 1 :(得分:0)
您可以使用前瞻来测试各种条件:
^(?=.*_PP\$|DT)(?=(?:.*_JJ)?)
^ start of string
^^^^ First condition
^^^^^ Optional second condition
然后将所有内容捕获到_NN:
^(?=_PP\$\|DT)(?=(?:.*_JJ)?)(.*_NN)
答案 2 :(得分:0)
你的正则表达式不是很糟糕,只是逃避管道|
,因为它是正则表达式中的特殊字符:
(\w+_(?:PP\$\|DT)(?:\w+_JJ)(\w+__(?:NN\|NNS)))
// here __^ and here __^