我想从文件名中提取同位素编号。我要找的数字是223和224。但是这些可能在文件名中出现多次,尤其是作为日期的一部分。如何捕获223或224(或任何3个字符的字符串)并忽略它们(如果它们是更长的数字字符串的一部分)?
我试过这些和其他几个,但没有运气。
sub(".*(223|224).*", "\\1", "St1_224standard_20200223")
sub(".*([223|224]{3}).*", "\\1", "St1_224standard_20200223")
sub(".*([2|3|4]{3}).*", "\\1", "St1_224standard_20200223")
当我想要的是224
时,我总是得到223
。我知道我可以使目标数字成为字符串中的最后一个,但我对其他人使用的文件名没有影响。谢谢
1条答案
按热度按时间goucqfw61#
你可以用
参见R demo online。
这里有几个关键点:
.*?
在开始时用于匹配到达后续子模式的第一次出现所需的最少字符量(?<!\d)
/(?!\d)
是定义数值边界的一对后向和前向perl=TRUE
使所有的工作,因为模式是一个PCRE兼容的模式(默认的TRE引擎不支持lookarounds)。注意,我将
223|224
压缩为22[34]
,它更短,更有效。也可以看到regex online demo。