R中的正则表达式在特殊字符之前提取单词

时间:2017-02-07 11:54:12

标签: r regex

我有一个词性标记字符串的数据框 示例:

best_JJS phone_NN only_RB issue_NN camera_NN sensor_NN have_VB mind_NN own_JJ 

我想删除/和'_'之后的标签,以便我有输出

best phone only issue camera sensor have mind own

我正在使用R而我无法为gsub函数找到合适的正则表达式。 我试过这个。

sentence= c("best_JJS phone_NN only_RB issue_NN camera_NN sensor_NN have_VB mind_NN own_JJ")
o1=gsub("\\_.*","",sentence, perl = T)

但是这会删除第一个下划线后的整个字符串。在此先感谢

1 个答案:

答案 0 :(得分:1)

您可以将_[A-Z]+ TRE模式与gsub

一起使用
sentence <- c("best_JJS phone_NN only_RB issue_NN camera_NN sensor_NN have_VB mind_NN own_JJ")
gsub("_[A-Z]+","",sentence)
[1] "best phone only issue camera sensor have mind own"

请参阅R demo

_[A-Z]+模式匹配下划线(_,注意它不必以正则表达式模式转义)和一个或多个(+)大写ASCII字母({{ 1}})。

你可以进一步确定模式,比如只匹配[A-Z],如果它前面有一个单词char,只有当跟着一个单词边界时才匹配大写字母:

_

如果您想为POS值创建一个非常具体的正则表达式,您可以使用替换:

"\\B_[A-Z]+\\b

继续将"\\B_(JJ|NN|CC|[VR]B)\\b" 添加到正则表达式模式中。