我试图使用R在"/"字符之前和之后提取字符.
例如,我可以使用以下代码获取标记:
s <- "hello/JJ world/NN"
# get the tags
sapply(s, function(x){gsub("([a-z].*?)/([A-z].*?)", "\\2", x)})
Run Code Online (Sandbox Code Playgroud)
返回
"JJ NN"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在"/"或"标记"之前提取字符时,使用以下内容:
sapply(s, function(x){gsub("([a-z].*?)/([A-z].*?)", "\\1", x)})
Run Code Online (Sandbox Code Playgroud)
我明白了
"helloJ worldN"
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到"你好世界",为什么标签的第一个字母在那里滑落?
我认为你在输出中保留这些字母的原因是你的正则表达式。([A-Z]一定有Z,我猜z是一个拼写错误 - 请参阅[A-Za-z] 速记类?) 是可以的,但后面跟着一个.*?惰性点匹配组,可以匹配除换行符之外的 0 个或无限个字符,最少为可能的。所以,它不会匹配 none。
您需要一个+量词来匹配 1 个或多个字符并将其应用于字符类[a-zA-Z]:
s <- "hello/JJ world/NN"
sapply(s, function(x){gsub("([a-zA-Z])/[a-zA-Z]+", "\\1", x)})
Run Code Online (Sandbox Code Playgroud)
查看演示
我删除了第二组,因为您没有使用它。