[Ruby] Comment remplacer uniquement une partie de la chaîne de caractères correspondant à l'expression régulière?

problème

Est-il possible de changer uniquement le http de l'URL se terminant par .png en https s'il y a une chaîne de caractères comme celle-ci?

str = 'kkk<a href="http://abcdege/hoge222/bar/t22est.md">aaab.png 
bbb<a href="http://abcdege/ho22aage/bddfear/ted2st.png ">aaak
ubotabbbccxcb <a href="http://abcdege/22hoge/b22ar/tfeest.md">aa23a
bbkubotasbbb <a href="http://abcdege/hoffee11ge/bar/test.html">appkub
otapoooabbb<a href="http://abcdege/ho22aage/bddfear/ted2swwt.png ">ab
ddbbb.png'

Considération

J'étais un peu inquiet. J'ai essayé de le remplacer en utilisant la méthode gsub (expression régulière, chaîne) de ruby.

Donc, je me suis demandé s'il y avait un moyen de ne remplacer qu'une partie de la correspondance (URL) (partie http cette fois).

Le résultat de la réflexion

Je ne pouvais pas y penser avec l'idée ci-dessus. En premier lieu, l'idée d'utiliser uniquement la méthode de la méthode gsub (expression régulière, chaîne) n'a peut-être pas été bonne. Il peut y avoir un moyen d'utiliser quelque chose comme un bloc d'expressions régulières. ** Mais à la fin, j'ai pu créer une procédure qui conduirait à des résultats similaires. ** **

Remplacez par un sous-marin en 2 étapes.

Aperçu de l'algorithme de pensée

".URL commençant par png".gsub(http, "https")

C'est un flux à remplacer.

Détails de l'algorithme considéré (produit fini)

Tout d'abord, extrayez l'URL de la chaîne de caractères. Je voulais utiliser String # scan ici, mais il semble qu'il existe déjà une méthode appelée" Extraire l'URL de la chaîne ". .. (trop incroyable) Référence: Extraire l'URL de la chaîne --Ruby Tips!

URI.extract(str)
#=> ["http://abcdege/hoge222/bar/t22est.md", "http://abcdege/ho22aage/bddfear/ted2st.png ", "http://abcdege/22hoge/b22ar/tfeest.md", "http://abcdege/hoffee11ge/bar/test.html", "http://abcdege/ho22aage/bddfear/ted2swwt.png "]

Ensuite, utilisez-les pour déterminer et remplacer chacun.

(Produit terminé)
URI.extract(str).each do |uri|
  if /.*(\.png)$/.match(uri)
    new_uri = uri.sub("http","https")
    str = str.sub(uri, new_uri)
  end
end
str
#=> "kkk<a href=\"http://abcdege/hoge222/bar/t22est.md\">aaab.png \nbbb<a href=\"https://abcdege/ho22aage/bddfear/ted2st.png\">aaak\nubotabbbccxcb <a href=\"http://abcdege/22hoge/b22ar/tfeest.md\">aa23a\nbbkubotasbbb <a href=\"http://abcdege/hoffee11ge/bar/test.html\">appkub\notapoooabbb<a href=\"https://abcdege/ho22aage/bddfear/ted2swwt.png\">ab\nddbbb.png "

Je pense que le but est de le remplacer par un sous-marin en deux étapes.

Recommended Posts

[Ruby] Comment remplacer uniquement une partie de la chaîne de caractères correspondant à l'expression régulière?
Modifiez la chaîne de caractères à remplacer en fonction de la chaîne de caractères correspondante en la remplaçant par l'expression régulière Python
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment enregistrer une partie d'une longue vidéo en utilisant OpenCV
Comment calculer la volatilité d'une marque
Découpez une partie de la chaîne à l'aide d'une tranche Python
[Ubuntu] Comment supprimer tout le contenu du répertoire
Comment tester les attributs ajoutés par add_request_method de pyramid
Comment mélanger une partie de la liste Python (au hasard.shuffle)
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
Récupérez la chaîne correspondante dans l'expression régulière et réutilisez-la lors du remplacement sur Python3
Comment compter rapidement la fréquence d'apparition des caractères à partir d'une chaîne de caractères en Python?
Comment tracer beaucoup de légendes en changeant la couleur du graphique en continu avec matplotlib
Comment écrire quand on veut mettre un nombre après le numéro de groupe à remplacer par une expression régulière dans re.sub de Python
Comment déterminer l'existence d'un élément sélénium en Python
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
Comment vérifier la taille de la mémoire d'une variable en Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
Comment extraire la chaîne de caractères souhaitée à partir d'une ligne 4 commandes
Comment intercepter ou falsifier la communication SSL de l'appareil iOS réel par un proxy
[Python] Comment utiliser l'instruction for. Une méthode d'extraction en spécifiant une plage ou des conditions.
[NNabla] Comment supprimer le niveau intermédiaire d'un réseau prédéfini
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
Comment couper la partie inférieure droite de l'image avec Python OpenCV
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[NNabla] Comment ajouter une couche de quantification à la couche intermédiaire d'un modèle entraîné
Comment mettre un numéro de ligne au début d'un fichier CSV
Je veux colorer une partie de la chaîne Excel avec Python
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Comment lire une vidéo tout en regardant le nombre d'images (Mac)
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Comment vérifier la version de Django
[Python] Comment inverser une chaîne de caractères
Comment obtenir le "nom" d'un champ dont la valeur est limitée par l'attribut choice dans le modèle Django
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
Divise la chaîne de caractères par le nombre de caractères spécifié. En Ruby et Python.
[NNabla] Comment obtenir la sortie (variable) de la couche intermédiaire du réseau construit
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Utilisez Pillow pour rendre l'image transparente et en superposer une partie seulement
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
[Numpy, scipy] Comment calculer la racine carrée d'une matrice Elmeet à valeur semi-régulière
Lien vers les points de données du graphe créé par jupyterlab & matplotlib
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Essayez d'installer uniquement la partie principale d'Ubuntu
Comment trouver la zone du diagramme de Boronoi
Comment incorporer des variables dans des chaînes python
Comment effacer les caractères générés par Python
[Note] Comment créer un environnement de développement Ruby