我有以下字符串
/blast/?about=P23415[29-457]
我想在df中得到两个数字,所以我可以单独访问它们,即df [1]
我试图在方括号内提取数字。我尝试过使用
gsub('.+\\[([0-9]+)\\].+?$', '\\1', mystring)
但是这会返回整个字符串。
我做错了什么?答案 0 :(得分:5)
使用类似的东西:
regmatches(subject, gregexpr("\\[\\K[^\\]]+(?=\\])", subject, perl=TRUE));
\[
匹配左大括号\K
告诉引擎放弃与其返回的最终匹配项目匹配的内容[^\]]+
匹配所有不是右括号的字符(这是匹配)(?=\])
断言接下来的是一个右大括号选项2:数字位数
如果您知道大括号内的内容始终为digits-digits
形式,则可以使正则表达式更具体:
regmatches(subject, gregexpr("\\[\\K\\d+-\\d+(?=\\])", subject, perl=TRUE));
答案 1 :(得分:2)
如果您希望[]
括号内的数字不含-
,请尝试以下
gsub('.+\\[([0-9]+)-([0-9]+)\\].*$', '\\1\\2', mystring)
甚至更好的正则表达式,
.+\[([0-9]+)(?:-([0-9]+))?\].*$
答案 2 :(得分:1)
您也可以尝试:
library(stringr)
str_extract_all(str1, perl('(?<=\\[|-)[0-9]+(?=\\]|-?)'))[[1]]
#[1] "29" "457"