String 在设置的位置提取字符

String 在设置的位置提取字符,string,r,truncate,String,R,Truncate,我试图找到一个函数,它可以提取字符串中某个位置的字符。例如,我有一个很长的文件名,其中有一个日期,我只想以日期结束: 'LT50420331984221PAC00_B7.tif' 我只想要'1984221'部分。 我提出了一个复杂的函数,但不知道是否有更优雅的解决方案。如果您知道日期在字符串中的确切位置,可以使用 substr('LT50420331984221PAC00_B7.tif', 10, 16) 例如: gsub('(.*)([0-9]+{7})[A-Z].*','\\2','LT

我试图找到一个函数,它可以提取字符串中某个位置的字符。例如,我有一个很长的文件名,其中有一个日期,我只想以日期结束:

'LT50420331984221PAC00_B7.tif'
我只想要'1984221'部分。
我提出了一个复杂的函数,但不知道是否有更优雅的解决方案。

如果您知道日期在字符串中的确切位置,可以使用

substr('LT50420331984221PAC00_B7.tif', 10, 16)
例如:

gsub('(.*)([0-9]+{7})[A-Z].*','\\2','LT50420331984221PAC00_B7.tif')
"1984221"

在这里,我假设日期是大写字母前7位。

我不知道如何用提供的信息来回答这个问题。日期部分:是否总是在
n
字符之后开始?始终以
19XX
20XX
开头?是否始终为
n
个字符运行?你能提供更多的信息让这更容易回答吗?你能把你的解决方案添加到OP中吗?一切都在R编程维基百科中解释:如果日期部分总是在同一个位置,这就是我要使用的。如果你假设字符串的长度,那么使用
sub
比使用
substr
有什么好处呢?@RicardoSaporta我不假设字符串的长度。长度是特定格式的日期长度。是的,我们说的是同样的话,只是用了不同的术语。我只是想知道在这个特定的环境中使用
sub
会得到什么,而使用
substr
是无法得到的?@RicardoSaporta我们说的不是同一件事。但我的解决方案更稳定:如果头寸发生变化(例如递增指数),我不会改变代码。例如,你可以查找一个由4个数字组成的字符串,表示“1970”和“2013”之间的一年,然后从中选择,直到大写字母之前(如@agstudy)。这样,日期是由7或8个数字组成并不重要。