在一组位置提取字符

12

我正在尝试查找一种可以提取字符串中特定位置字符的函数。例如,我有一个包含日期的长文件名,我只想得到日期:

'LT50420331984221PAC00_B7.tif'

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


我不认为仅凭提供的信息就能普遍回答这个问题。日期部分是否总是在第n个字符之后开始?是否总是以19XX20XX开头?是否总共运行n个字符?您能否提供更多信息以便更容易回答这个问题? - thelatemail
请问您能否将您的解决方案添加到原帖中呢? - agstudy
1
所有的内容都在R编程维基书中有详细解释:http://en.wikibooks.org/wiki/R_Programming/Text_Processing - PAC
2个回答

22

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

substr('LT50420331984221PAC00_B7.tif', 10, 16)

1
如果日期部分始终出现在相同的位置,那么这就是我会使用的方法。 - Jesse

3

例如:

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

我假设在大写字母之前有7个数字表示日期。


如果您假设字符串的长度,那么使用 sub 操作符相对于 substr 有什么优势呢? - Ricardo Saporta
1
@RicardoSaporta 我并不假设字符串的长度。长度是特定格式日期的长度。我假设这个日期的位置。 - agstudy
是的,我们说的是同样的事情,只是使用不同的术语。我只是想知道在这种特定情况下使用 sub 与使用 substr 相比,你能得到什么? - Ricardo Saporta
1
@RicardoSaporta 我们的意思不一样。但我的解决方案更稳定:如果位置改变(例如增加的索引),我不会改变我的代码。 - agstudy
1
你可以查找一个由4个数字组成的字符串,表示从“1970”到“2013”之间的年份,并从那里选择直到大写字母之前(例如@agstudy)。这样无论日期由7个数字还是8个数字组成都没有关系。 - hvollmeier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接