我使用的是
gsub(".*_","",ldf[[j]]),1,nchar(gsub(".*_","",ldf[[j]]))-4)
创建一个路径和文件名来写入。它对于在 lfd
只有一个下划线的文件名。如果文件名有另一个下划线,那么它就会把第二个下划线前面的所有东西都切掉。
例如,我有这样一个文件名Arof_07122016_2.csv
而我想... 07122016
但我得到 2
. 但我不明白为什么会发生这种情况。我怎样才能用这一行只剪掉第一个下划线的字符,而保留第二个下划线?
正则表达式重复默认是贪婪的,这在下面的文章中解释过。?regex
:
默认情况下,重复是贪婪的,所以使用最大可能的重复次数。这可以通过在量化符后添加 ? 来改变为 "最小"。(还有更多的量化符允许近似匹配:参见 TRE 文档。)
所以你应该使用以下模式 ".*?_"
. 然而, gsub
会进行多次匹配,所以你最终会得到相同的结果。要解决这个问题,请使用 sub
只会进行1次匹配,或者通过使用 ^
在regex中。
sub(".*?_","","Arof_07122016_2.csv")
[1] "07122016_2.csv"
gsub("^.*?_","","Arof_07122016_2.csv")
[1] "07122016_2.csv"