il s'agit d'un suivi du fil de discussion précédent ici . J'ai le même objectif, mais avec un léger ajustement.
Donc, en supposant un nouveau vecteur de noms de fichiers
str_match_all("D:/example/(.+)/(.+)/OD/CD/*blue*") %>%
Comment ajusterais-je ce code
str_match_all("D:/example/(.+)/(.+)/OD/CD/(.+)") %>%
pour que je puisse sélectionner uniquement les fichiers qui ont bleu quelque part dans le nom de fichier? J'avais essayé d'ajuster cette ligne
library(stringr)
library(magrittr)
all_dirs <-
c("D:/example/sub1/session1/OD/CD/text.txt",
"D:/example/sub2/session1/OD/CD/text.txt",
"D:/example/sub3/session1/OD/CD/text.txt")
new_dirs <-
all_dirs %>%
# Match each group using regex
str_match_all("D:/example/(.+)/(.+)/OD/CD/(.+)") %>%
# Paste the matched groups into one path
vapply(function(x) paste0(x[2:4], collapse = "_"), character(1)) %>%
paste0("D:/all_files/", .)
# Copy them.
file.copy(all_dirs, new_dirs)
pour dire à la place
c("D:/example/sub1/session1/OD/CD/adsfadfadsfadfadf_blue.txt", "D:/example/sub2/session1/OD/CD/text.txt",
"D:/example/sub3/session1/OD/CD/text.txt")
mais cela ne semblait pas fonctionner. De plus, l'objectif principal reste le même que le post précédent. Je veux que le nom de fichier complet soit conservé.
3 Réponses :
Désolé, je ne connais pas R, mais que diriez-vous de:
str_match_all("D:/example/(.+)/(.+)/OD/CD/(.*blue[^/]*)") %>%
Si l'expression régulière dans R se comporte comme dans d'autres moteurs / langues, alors le. + correspondra à un ou plusieurs des personnage. Donc, peut potentiellement correspondre à plusieurs niveaux dans la hiérarchie des répertoires. Le. * Correspondra à zéro ou plus de n'importe quel caractère. Le [^ /] * correspondra à zéro ou plus de tout caractère qui n'est pas une barre oblique.
J'espère que cela vous aidera ... vous voudrez peut-être changer tous vos. + Ou. * En [^ / ] + ou [^ /] * si vous souhaitez limiter cette section de l'URL à un seul niveau de répertoire.
Nous pouvons utiliser grep pour filtrer d'abord les valeurs, puis continuer la même approche
all_dirs <- c("D:/example/sub1/session1/OD/CD/adsfadfadsfadfadf_blue.txt",
"D:/example/sub2/session1/OD/CD/text.txt",
"D:/example/sub3/session1/OD/CD/text.txt")
data
new_dirs <- grep('blue', all_dirs, value = TRUE) %>%
stringr::str_match_all("D:/example/(.+)/(.+)/OD/CD/(.+)") %>%
vapply(function(x) paste0(x[2:4], collapse = "_"), character(1)) %>%
paste0("D:/all_files/", .)
new_dirs
#[1] "D:/all_files/sub1_session1_adsfadfadsfadfadf_blue.txt"
C'est peut-être une autre solution.
Demande initiale de traitement en modifiant le motif.
Puis, en tournant " bleu " en "(. bleu. em>) ".
" blue "signifie que les textes de visée obtiennent le nom de fichier qui ne contient que" blue ".
" (. blue. ) "signifie la chaîne cible de quatre types.
Il y a quatre exemples.
uniquement "bleu".
"bluewud".
"Dhublue".
"Dueblue72yd".
new_dirs <-
all_dirs %>%
# Match each group using regex
str_match_all("D:/example/(.+)/(.+)/OD/CD/(.*blue.*)") %>%
# Paste the matched groups into one path
vapply(function(x){paste0(x[2:4], collapse = "_")%>%paste0(x[1],.)},character(1)) %>%
grep(pattern = "D:",value = T)