如何从 package stringr 中提取数字但不包括带 str_extract() 的括号?

How to extract number within but excluding brackets with str_extract() from package stringr?

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

我有以下向量,想提取 方括号 内的数字,即不包括括号本身。数字可能是负数。问题也可能是:

如何从{stringr}包中只提取函数str_extractfirst capturing group

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 demo

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

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

详情:

  • (?<=\[) - 与紧接在 [
  • 之前的位置匹配的正后视
  • -? - 一个可选的 - 字符
  • \d+ - 一位或多位数字
  • \d*\.?\d+ - 匹配零个或多个数字,一个可选的 .,然后是一个或多个数字
  • (?=\]) - 匹配紧跟 ].
  • 的位置的正向前瞻