如何从 package stringr 中提取数字但不包括带 str_extract() 的括号?
How to extract number within but excluding brackets with str_extract() from package stringr?
那里有很多正则表达式问题,但我无法以优雅的方式解决以下问题。
我有以下向量,想提取 方括号 内的数字,即不包括括号本身。数字可能是负数。问题也可能是:
如何从{stringr}
包中只提取函数str_extract
的first 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+(?=\])")
如果需要匹配整数或浮点数,可以使用
stringr::str_extract(string, "(?<=\[)-?\d*\.?\d+(?=\])")
详情:
(?<=\[)
- 与紧接在 [
之前的位置匹配的正后视
-?
- 一个可选的 -
字符
\d+
- 一位或多位数字
\d*\.?\d+
- 匹配零个或多个数字,一个可选的 .
,然后是一个或多个数字
(?=\])
- 匹配紧跟 ]
. 的位置的正向前瞻
那里有很多正则表达式问题,但我无法以优雅的方式解决以下问题。
我有以下向量,想提取 方括号 内的数字,即不包括括号本身。数字可能是负数。问题也可能是:
如何从{stringr}
包中只提取函数str_extract
的first 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+(?=\])")
如果需要匹配整数或浮点数,可以使用
stringr::str_extract(string, "(?<=\[)-?\d*\.?\d+(?=\])")
详情:
(?<=\[)
- 与紧接在[
之前的位置匹配的正后视
-?
- 一个可选的-
字符\d+
- 一位或多位数字\d*\.?\d+
- 匹配零个或多个数字,一个可选的.
,然后是一个或多个数字(?=\])
- 匹配紧跟]
. 的位置的正向前瞻