R sub with back reference 没有正确替换

R sub with back reference not replacing properly

我正在尝试从一些文件名中提取一个字符串,以便稍后用作变量。

文件名如下所示:

c("./Vote/Академический vote 1.xls", "./Vote/Академический vote 2.xls", 
"./Vote/Академический vote 3.xls", "./Vote/Алексеевский в городе Москве vote 1.xls", 
"./Vote/Алексеевский в городе Москве vote 2.xls", "./Vote/Алтуфьевский vote 1.xls", 
"./Vote/Алтуфьевский vote 2.xls", "./Vote/Алтуфьевский vote 3.xls", 
"./Vote/Арбат vote 1.xls", "./Vote/Арбат vote 2.xls", "./Vote/Аэропорт vote 1.xls", 
"./Vote/Аэропорт vote 2.xls", "./Vote/Аэропорт vote 3.xls", "./Vote/Бабушкинский vote 1.xls", 
"./Vote/Бабушкинский vote 2.xls", "./Vote/Басманный vote 1.xls", 
"./Vote/Басманный vote 2.xls", "./Vote/Басманный vote 3.xls", 
"./Vote/Беговой vote 1.xls", "./Vote/Беговой vote 2.xls", "./Vote/Бескудниковский vote 1.xls", 
"./Vote/Бескудниковский vote 2.xls", "./Vote/Бибирево vote 1.xls", 
"./Vote/Бибирево vote 2.xls", "./Vote/Бибирево vote 3.xls")
> dput(sample(vote_files, size = 25))
c("./Vote/Лианозово vote 2.xls", "./Vote/Зюзино vote 1.xls", 
"./Vote/Восточное Дегунино vote 2.xls", "./Vote/Аэропорт vote 2.xls", 
"./Vote/Академический vote 1.xls", "./Vote/Замоскворечье в городе Москве vote 1.xls", 
"./Vote/Обручевский vote 2.xls", "./Vote/Даниловский vote 3.xls", 
"./Vote/Нагатино-Садовники vote 1.xls", "./Vote/Ново-Переделкино в городе Москве vote 1.xls", 
"./Vote/Кунцево vote 2.xls", "./Vote/Текстильщики в городе Москве vote 2.xls", 
"./Vote/Южное Медведково vote 1.xls", "./Vote/Западное Дегунино vote 2.xls", 
"./Vote/Хамовники vote 1.xls", "./Vote/Крюково vote 1.xls", "./Vote/Беговой vote 1.xls", 
"./Vote/Восточный vote 1.xls", "./Vote/Богородское vote 2.xls", 
"./Vote/Некрасовка vote 2.xls", "./Vote/Косино-Ухтомский vote 1.xls", 
"./Vote/Лосиноостровский vote 3.xls", "./Vote/Хорошевский vote 2.xls", 
"./Vote/Бирюлево Западное vote 2.xls", "./Vote/Гольяново vote 3.xls"
)

我正在尝试使用 sub/Vote//vote #.xls 之间提取俄语文本,如下所示

sub(x= string, pattern = ".*((?<=.//Vote//).*(?=vote)).*", replacement = "\1", perl = T)

我必须使用环视,因为我要提取的字符串有时不止一个单词。然而,尽管当我在在线正则表达式测试器上验证时捕获组似乎捕获了正确的文本,但 sub 调用只是 returns 我输入的完全相同的字符串。

这里有什么问题?或者,有没有更简单的方法来做到这一点?

只需删除一致的内容,而不是捕获其间的文本。

vote_files2 <- sub("./Vote/", "", vote_files)
vote_files2 <- sub(" vote \d*.xls", "", vote_files2)
vote_files2

正如在问题下的评论中提到的,如果双斜杠是单斜杠,您的正则表达式将起作用(虽然没有提到那里也 'vote' 被替换为“投票”,即 space 在它之前)。

关于一种更简单的方法,basename 将获取文件名部分,之后我们可以用空字符串替换 space 后跟 vote 以及其后的所有内容:

sub(" vote.*", "", basename(x))

给予:

 [1] "Лианозово"                        "Зюзино"                          
 [3] "Восточное Дегунино"               "Аэропорт"                        
 [5] "Академический"                    "Замоскворечье в городе Москве"   
 [7] "Обручевский"                      "Даниловский"                     
 [9] "Нагатино-Садовники"               "Ново-Переделкино в городе Москве"
[11] "Кунцево"                          "Текстильщики в городе Москве"    
[13] "Южное Медведково"                 "Западное Дегунино"               
[15] "Хамовники"                        "Крюково"                         
[17] "Беговой"                          "Восточный"                       
[19] "Богородское"                      "Некрасовка"                      
[21] "Косино-Ухтомский"                 "Лосиноостровский"                
[23] "Хорошевский"                      "Бирюлево Западное"               
[25] "Гольяново"                       

更新: 处理嵌入 spaces 的短语。