我有一个包含以下内容的字符串 vector :

Number of source1.2_SPNB.txt
Number of source1.1_SPNB.txt
Number of source1.3_SPNB.txt

我需要在一个新 vector 中提取“source1.1”,“source1.2”和“source1.3”。

this之后,我尝试了:
gsub("(?<=of )(.*)(?=_)", "\\1", string.vector)

但我得到一个错误:



然后,我尝试:
gsub("(?<=of )(.*)(?=_)", "\\1", string.vector, perl = TRUE)

但是它返回了完全相同的字符串 vector 。

我究竟做错了什么?

最佳答案

有几个问题:

  • perl = TRUE需要使用lookahead / lookbehind
  • ,即使我们使用正则表达式所做的只是用其自身替换所需的子字符串-我们想要做的是匹配整个字符串(而不是使用零宽度的lookahead / lookbehind),然后将整个字符串替换为只是与捕获组匹配的部分。
  • 大概只需要一个替换,所以应该使用
  • 而不是sub

    解决这些问题,我们得到:
    sub(".*(source.*?)_.*", "\\1", string.vector)
    

    08-16 07:10