r语言 - 如何从包字符串中提取数字,但不包括括号中的str_extract() ?



有很多正则表达式问题,但我无法以一种优雅的方式解决以下问题。

我有以下向量,并希望仅提取方括号内的数字,即不包括括号本身。这些数字可能是负的。这个问题也可能是:

如何从{stringr}包中仅提取功能为str_extract的第一个捕获组?

string <- c("[1] cate 1", "[-1] cate -1", "[2] cate 2")
stringr::str_extract(string = string, pattern =  "\[[^:digit:]+\]")
[1] "[1]"  "[-1]" "[2]" 
stringr::str_extract(string = string, pattern =  "\[[^(:digit:)]+\]")
[1] "[1]"  "[-1]" "[2]" 

我还试图将\1附加到模式中以提取第一组,并得到以下错误:

stringr::str_extract(string = string, pattern =  "\[[^(?:digit:)]+\]\1")
Error in stri_extract_first_regex(string, pattern, opts_regex = opts(pattern)) : 
Back-reference to a non-existent capture group. (U_REGEX_INVALID_BACK_REF)

感谢您的时间,如果这个问题重复,我深表歉意。

可以使用

stringr::str_extract(string, "(?<=\[)-?\d+(?=\])")

参见R演示

如果需要匹配整数或浮点数,可以使用

stringr::str_extract(string, "(?<=\[)-?\d*\.?\d+(?=\])")

细节:

  • (?<=[)-匹配[
  • 前面的位置
  • -?-一个可选的-字符
  • d+-一个或多个数字
  • d*.?d+-匹配0个或多个数字,一个可选的.,然后一个或多个数字
  • (?=])-一个正向前看,匹配位置紧接]

最新更新