Gsub在R正则表达式中获取部分匹配的字符串?

时间:2012-10-19 01:41:19

标签: regex r

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

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

4 个答案:

答案 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]+")