3
gsub('[a-zA-Z]+([0-9]{5})','\\1','htf84756.iuy')
[1] "84756.iuy"

我想得到84756,我该怎么办?

4

4 回答 4

6

使用gregexpr()withregmatches()的优点是只要求您的模式与您实际想要提取的位相匹配:

string <- 'htf84756.iuy'
pat <- "(\\d){5}"

regmatches(string, gregexpr(pat, string))[[1]]
# [1] "84756"

(实际上,当提供的字符串可能包含多个匹配的子字符串时,这些函数更有用pat。)

于 2012-10-19T01:56:18.077 回答
5

尝试这个:

R> gsub('[a-zA-Z]+([0-9]{5}).*','\\1','htf84756.iuy')
[1] "84756"
R> 

您需要在.*“贪婪”正则表达式末尾添加 5 位数字后终止它。

于 2012-10-19T01:44:10.183 回答
2

使用stringr,您可以使用str_extract

library(stringr)
str_extract("htf84756.iuy", "[0-9]+")
于 2012-10-19T12:46:44.767 回答
2

根据要添加到您的内容,这也可以正常工作(例如 Dirk 的答案更好):

gsub('[a-zA-Z]+([0-9]{5})\\.([a-zA-Z])+','\\1','htf84756.iuy')

如果您只想要数字字符串,这也可能会有所帮助:

gsub('[^0-9]','','htf84756.iuy')
于 2012-10-19T01:45:40.623 回答