R regex解析@之后的标记,并且字符串中没有其他标记

R regex解析@之后的标记,并且字符串中没有其他标记,regex,r,gsub,Regex,R,Gsub,我在解析文本字符串中的地址时遇到问题。通常的地址是“@address-token”或“@address-token/ntoken” 然而,在某些情况下,地址将是字符串中的唯一标记,然后regex将返回包含@ string <- c("@address token token token", "@address token token /ntoken", "@address") gsub("^\\.?@([a-z0-9_]{1,25})[^a-z0-9_]+.*$", "\\1", stri

我在解析文本字符串中的地址时遇到问题。通常的地址是“@address-token”或“@address-token/ntoken”

然而,在某些情况下,地址将是字符串中的唯一标记,然后regex将返回包含@

string <- c("@address token token token", "@address token token /ntoken", "@address")
gsub("^\\.?@([a-z0-9_]{1,25})[^a-z0-9_]+.*$", "\\1", string)
# [1] "address"  "address"  "@address"
字符串
在某些情况下,地址将是字符串中的唯一标记,然后regex将返回包含@

string <- c("@address token token token", "@address token token /ntoken", "@address")
gsub("^\\.?@([a-z0-9_]{1,25})[^a-z0-9_]+.*$", "\\1", string)
# [1] "address"  "address"  "@address"
因为在这种情况下,没有对手

只要做一点小小的改变:

[^a-z0-9\]+
转换为
[^a-z0-9\]?
以使其可选

^\.?@([a-z0-9_]{1,25})[^a-z0-9_]?.*$
以下是使用单词边界:

gsub("^\\.?@([a-z0-9_]{1,25})\\b.*$", "\\1", string)

使用正则表达式中的
Straplyc
可以大大简化。这将返回与括号内正则表达式部分匹配的正则表达式部分:

library(gsubfn)
string <- c("@address token token token", "@address token token /ntoken", 
   "@address")

strapplyc(string, "@([a-z0-9_]{1,25})", simplify = TRUE)
## [1] "address" "address" "address"
库(gsubfn)
字符串您可以使用:

library(stringr)
 str_extract(string, perl('(?<=@)[a-z0-9_]{1,25}'))
#[1] "address" "address" "address"
库(stringr)
str_extract(字符串,perl(')(?
library(stringr)
 str_extract(string, perl('(?<=@)[a-z0-9_]{1,25}'))
#[1] "address" "address" "address"