gsub('[a-zA-Z]+([0-9]{5})','\\1','htf84756.iuy')
[1] "84756.iuy"
我想得到84756,我该怎么办?
使用gregexpr()
withregmatches()
的优点是只要求您的模式与您实际想要提取的位相匹配:
string <- 'htf84756.iuy'
pat <- "(\\d){5}"
regmatches(string, gregexpr(pat, string))[[1]]
# [1] "84756"
(实际上,当提供的字符串可能包含多个匹配的子字符串时,这些函数更有用pat
。)
尝试这个:
R> gsub('[a-zA-Z]+([0-9]{5}).*','\\1','htf84756.iuy')
[1] "84756"
R>
您需要在.*
“贪婪”正则表达式末尾添加 5 位数字后终止它。
使用stringr
,您可以使用str_extract
:
library(stringr)
str_extract("htf84756.iuy", "[0-9]+")
根据要添加到您的内容,这也可以正常工作(例如 Dirk 的答案更好):
gsub('[a-zA-Z]+([0-9]{5})\\.([a-zA-Z])+','\\1','htf84756.iuy')
如果您只想要数字字符串,这也可能会有所帮助:
gsub('[^0-9]','','htf84756.iuy')