使用R将字符提取到"/"

Jus*_*afe 6 regex r

我试图使用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)

我怎样才能得到"你好世界",为什么标签的第一个字母在那里滑落?

Wik*_*żew 3

我认为你在输出中保留这些字母的原因是你的正则表达式。([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)

查看演示

我删除了第二组,因为您没有使用它。