2
votes

Utilisation de groupe et de backreference dans regex dans R - stringr :: str_replace

J'ai une situation simple, mais j'ai du mal à utiliser groupe et backreference dans l'expression régulière. Comment pourrais-je faire cela avec stringr :: str_replace ?.

Par exemple, je veux transformer test.txt en test.evaluation.txt code>. Je souhaite quelque chose comme ceci:

stringr::str_replace("test.txt", "\\.(\\1)$", ".evaluation.(\\1)")

Je voudrais utiliser le groupe "1" pour enregistrer le format de fichier. Merci d'avance si quelqu'un peut vous aider avec une réponse dans ce format.


2 commentaires

Je pense que la correspondance de motif devrait être différente


stringr :: str_replace ("test.txt", "\\. ([^.] *) $", ".evaluation. \\ 1")


3 Réponses :


5
votes

MODIFIER Avec stringr :

my_string<-"test.txt"
res<-unlist(strsplit(my_string,"\\."))
paste0(res[1],".evaluation.",res[2])
[1] "test.evaluation.txt"

Pas le plus efficace:

stringr::str_replace_all(my_string,"([a-z])(.txt)","\\1.evaluation\\2")
[1] "test.evaluation.txt"


0 commentaires

1
votes

Une option avec sub pour faire correspondre un . et le remplacer par . suivi par 'evaluation' et un autre . code>

sub("\\.", ".evaluation.", my_string)
#[1] "test.evaluation.txt"


0 commentaires

1
votes

Avec des groupes de capture:

sub("\\.([[:alnum:]]+)$","\\.evaluation\\.\\1","text.txt")
[1] "text.evaluation.txt"


0 commentaires