有很多正则表达式问题,但我无法以一种优雅的方式解决以下问题。
我有以下向量,并希望仅提取方括号内的数字,即不包括括号本身。这些数字可能是负的。这个问题也可能是:
如何从{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个或多个数字,一个可选的.
,然后一个或多个数字(?=])
-一个正向前看,匹配位置紧接]
。