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