J'ai une chaîne
text = "Math\n \n \n 600 rubles / 45 min."
text2 = "Math\n \n \n in a group"
Et je veux remplacer \n \n \n
par " "
uniquement si les chiffres suivent. En conséquence, je souhaite avoir:
"Math 600 rubles / 45 min."
"Math\n \n \n in a group"
J'ai essayé gsub("\n \n \n [\\d]", " ", text)
, mais il remplace également le premier chiffre.
3 réponses
Vous pouvez utiliser un modèle qui correspondra à 3 occurrences de \n
suivies de plus de 6 espaces, puis capturer le chiffre et le remplacer par une référence arrière au groupe 1:
gsub("(?:\n {6,}){3}(\\d)", " \\1", text)
Voir la démo R
Détails
(?:\n {6,}){3}
- 3 occurrences consécutives de:-
\n
- une nouvelle ligne -
{6,}
- 6 espaces ou plus
-
(\\d)
- Groupe 1 (désigné par\1
du modèle de remplacement): n'importe quel chiffre.
text =c("Math\n \n \n 600 rubles / 45 min.","Math\n \n \n in a group")
gsub('((\n\\s+){1,})(?=\\d)',' ',text,perl=T)
#[1] "Math 600 rubles / 45 min." "Math\n \n \n in a group"
J'ai trouvé le modèle suivant:
gsub("\\n[[:blank:]]*\\n[[:blank:]]*\\n[[:blank:]]*(\\d+)", " \\1", text)
Ce modèle correspond à trois nouvelles lignes, successivement, se terminant par un nombre. Il permet une quantité arbitraire et non fixe d'espaces blancs entre chaque nouvelle ligne. Cela rend la correspondance flexible et permet d'éviter un raté de comptage incorrect des espaces (ou de nouvelles données entrantes ne se comportant pas comme prévu).
Le principal problème que je vois avec votre appel actuel à gsub
est que vous utilisez des espaces de largeur fixe entre les sauts de ligne. De plus, [\\d]
n'est jamais utilisé dans le remplacement. Par conséquent, vous consommez ce numéro mais il n'apparaîtra pas le remplacement.
Questions connexes
De nouvelles questions
r
R est un langage de programmation et un environnement logiciel libres et open source pour le calcul statistique, la bioinformatique, la visualisation et le calcul général. Veuillez fournir des exemples minimaux et reproductibles ainsi que le résultat souhaité. Utilisez dput () pour les données et spécifiez tous les packages non basiques avec des appels à library (). N'incorporez pas d'images pour les données ou le code, utilisez plutôt des blocs de code en retrait. Pour les questions relatives aux statistiques, utilisez https://stats.stackexchange.com.