Regex Java中PennTreeBank标记的正则表达式 请考虑PuntReBead标签的一些例子: ADJP -ADV ADVP -BNF CC CD -CLF -CLR -HLN PRP$ PR-P$ NP 请考虑我的程序执行的一个实例。
Regex Java中PennTreeBank标记的正则表达式 请考虑PuntReBead标签的一些例子: ADJP -ADV ADVP -BNF CC CD -CLF -CLR -HLN PRP$ PR-P$ NP 请考虑我的程序执行的一个实例。,regex,nlp,regex-negation,Regex,Nlp,Regex Negation,Enter your regex: ^-{0,1}[A-Z]{1,6}-{0,1}[A-Z]{0,1}\${0,1} Enter input string to search: -HLN I found the text "-HLN" starting at index 0 and ending at index 4. 它很好用 我的任务实际上是成功地识别除“NP”标记之外的任何标记(请参考上面的标记示例)。我写了下面的正则表达式 Enter your regex: (^-{0,1}[A-Z]
Enter your regex: ^-{0,1}[A-Z]{1,6}-{0,1}[A-Z]{0,1}\${0,1}
Enter input string to search: -HLN
I found the text "-HLN" starting at index 0 and ending at index 4.
它很好用
我的任务实际上是成功地识别除“NP”标记之外的任何标记(请参考上面的标记示例)。我写了下面的正则表达式
Enter your regex: (^-{0,1}[A-Z]{1,6}-{0,1}[A-Z]{0,1}\${0,1})&&^(NP)
Enter input string to search: -HLN
No match found.
这不是理想的结果
有人能帮我修改正则表达式以适应任务吗
谢谢。作为“not”操作符的^as只在字符类中起作用。所以[^abcd]
表示任何不是a、b、c或d的字符
如果我是你,我会使用你原来的一个,并检查代码中的特殊情况!省去你很多头疼的事;最好避免使用复杂的正则表达式,因为它们会变得非常慢。这可能有点离谱,但这是我的看法 即使有环顾断言,也很难做到这一点。
使之困难的是边界条件:
(?:^ |)(?你的其他建议是什么?{作为“not”运算符,^只在字符类中起作用。因此[^abcd]表示任何不是a、b、c或d的字符。}没问题:)看看你文章的另一个答案,你会发现,不是所有在英语句子中容易描述的字符都能很容易地与正则表达式匹配。
(?:^|(?<=[^A-Z\$-])) # Behind us, this is OK: BOL or NOT A-Z, nor '$', nor '-'
(?!NP(?:$|[^A-Z\$-])) # In front of us, exclude: 'NP' followed by NOT A-Z, nor '$', nor '-'
-? # This is your accepted PTB forms:
[A-Z]{1,6} # ..
-? # ..
[A-Z]? # ..
\$? # ..
(?=$|[^A-Z\$-]) # Finally, followed by EOL or NOT A-Z, nor '$', nor '-'
$ptb = 'ADJP{-ADV} ADVP {-BNF NP CC} CD -CLF -CLR -HLN PRP$ PR-P$ NP';
while ($ptb =~
/
(?:^|(?<=[^A-Z\$-]))
(?!NP(?:$|[^A-Z\$-]))
-?
[A-Z]{1,6}
-?
[A-Z]?
\$?
(?=$|[^A-Z\$-])
/xg )
{
print "'$&'\n";
}
'ADJP'
'-ADV'
'ADVP'
'-BNF'
'CC'
'CD'
'-CLF'
'-CLR'
'-HLN'
'PRP$'
'PR-P$'