Rechercher et remplacer une expression par une variable répétée?

-1

J'ai une liste d'éléments dans un fichier texte qui ressemble à ceci:

Masterfile="DM.xml" Doc-Name="PCP0001 Protocol" group="FP Team"
Masterfile="DM.xml" Doc-Name="PCR0001 Report" group="FP Team"
Masterfile="DM.xml" Doc-Name="DCR0002 Review" group="FP Team"

Je voudrais élargir la partie centrale pour ressembler à ceci:

Masterfile="DM.xml" Doc="http://1.1.1.1/PCP0001.Protocol.doc" Doc-Name="PCP0001 Protocol" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/PCR0001.Report.doc" Doc-Name="PCR0001 Report" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/DCR0002.Review.doc" Doc-Name="DCR0002 Review" group="FP Team"

En d'autres termes, je souhaite utiliser le nom du document, ajouter une URL devant celui-ci et remplacer les espaces par ".".

Quelqu'un peut il m'aider avec ça? J'en ai littéralement 900, donc de sorte à travers.

Voici ce que j'ai essayé dans NotePad ++:

J'ai utilisé cette expression Find:

Doc-Name=[^"]*"([^"]+)"[^"]

Et utilisé cette expression de remplacement:

Doc="http://1.1.1.1/$1.doc" Doc-Name="$1" 

Cela m'a amené 90% mais pas tout à fait. Je ne sais pas comment remplacer les espaces dans $ 1 avec des points. Cela va finir le travail et j'ai besoin d'aide ici.

chilman408
la source
Bienvenue sur Super User! Qu'avez-vous essayé jusqu'à présent? Quels problèmes avez-vous rencontrés? S'il vous plaît modifier votre question d'inclure cette information pour aider les gens à vous répondre. Merci! :)
bertieb
Oui, raisonnable, voici ce que j'ai essayé. Dans NotePad ++, j'ai utilisé cette expression pour trouver: Doc-Name = [^ "] *" ([^ "] +)" [^ "], puis cette expression à remplacer: Doc =" 1.1.1.1/$1.doc " Doc-Name = "$ 1" Cela m'a valu 90% ... mais je ne sais pas comment remplacer les espaces du $ 1 par des points ... Besoin d'aide ici.
chilman408
Je n'ai pas lu le tout, mais si vous capturez quelque chose et que vous voulez remplacer quelque chose au sein d'une capture, faites une deuxième regex. Aussi, pour remplacer un espace par une période, [ ]remplacer par . (point n'aurait pas de signification spéciale dans la partie de remplacement, donc ne serait pas échappé) .. mais vous n'avez probablement pas besoin de deux regex pour cela
barlop
ta partie de recherche a l'air un peu bizarre, sûrement cela suffira Doc-Name="([^"]*)" Je n'ai pas le temps de faire le remplacement mais il est remplacé parDoc=......... Doc-name=......
barlop
i.imgur.com/VGRDo2v.png Rechercher- Doc-Name="([^"]*)" remplaçons avec- Doc="http://1.1.1.1/$1" Doc-Name="$1" fait dans notepad ++ Ah ok je vois que vous voulez faire autre remplacer .. Je dois y aller maintenant, se penchera à nouveau plus tard , espérons que quelqu'un d' autre vous résoudrez / aide avec elle plus tôt
barlop

Réponses:

1

Voici un moyen qui fonctionne s'il y a plus d'un espace:

  • Ctrl+H
  • Trouver quoi: Doc-Name="([^"\h]+)\h+([^"\h]+)(?:\h+([^"\h]+))?(?:\h+([^"\h]+))?(?:\h+([^"\h]+))?(?:\h+([^"\h]+))?"
  • Remplacer par: Doc="http://1.1.1.1/$1.$2(?3.$3:)(?4.$4:)(?5.$5:)(?6.$6:).doc" $0
  • check Enveloppez-vous
  • vérifier l'expression régulière
  • Replace all

Explication:

Doc-Name="          : literally
([^"\h]+)           : group 1, 1 or more any character that is not a double quote or horizontal space
\h+                 : 1 or more horizontal space
([^"\h]+)           : group 2, 1 or more any character that is not a double quote or horizontal space
(?:                 : non capture group
  \h+               : 1 or more horizontal space
  ([^"\h]+)         : group 2, 1 or more any character that is not a double quote or horizontal space
)?                  : end group, optional
(?:\h+([^"\h]+))?   : same as above
(?:\h+([^"\h]+))?   : same as above
(?:\h+([^"\h]+))?   : same as above
....... as many as you need
"                   : double quote

Remplacement:

Doc="http://1.1.1.1/    : literally
$1                      : content of group 1
.                       : a dot
$2                      : content of group 2
(?3.$3:)                : conditional replacement, if group 3 exists replace by itself preceded with a dot
(?4.$4:)                : same as above for group 4
(?5.$5:)                : same as above for group 5
(?6.$6:)                : same as above for group 6
....... as many as you need
.doc"                   : literally
$0                     : a space then content of group 0 (ie. the whole match)

Étant donné une entrée comme:

Masterfile="DM.xml" Doc-Name="PCP0001 Protocol abc def ghi jkl" group="FP Team"
Masterfile="DM.xml" Doc-Name="PCR0001 Report xyz" group="FP Team"
Masterfile="DM.xml" Doc-Name="DCR0002 Review" group="FP Team"

Résultat:

Masterfile="DM.xml" Doc="http://1.1.1.1/PCP0001.Protocol.abc.def.ghi.jkl.doc" Doc-Name="PCP0001 Protocol abc def ghi jkl" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/PCR0001.Report.xyz.doc" Doc-Name="PCR0001 Report xyz" group="FP Team"
Masterfile="DM.xml" Doc="http://1.1.1.1/DCR0002.Review.doc" Doc-Name="DCR0002 Review" group="FP Team"
Toto
la source
-1

Je l'ai compris .... lol

Comme l'a souligné barlop (merci), ce problème est plus facile après avoir été divisé en deux étapes.

Étape 1. Ajoutez le composant Doc = "URL" comme expliqué dans l'OP

Étape 2. Ceci est un multi-étape

Rechercher: Doc = (\ ". ) \ S (. .Doc")

Remplacer: Doc = \ 1. \ 2

Utilisez replace all sous NotePad ++, mais utilisez-le autant de fois que nécessaire pour remplacer tous les espaces.

TERMINÉ!

chilman408
la source
Vous avez demandé comment gérer un motif de répétition. Un espace ne pose évidemment pas de problème. Donc, vous n'avez pas demandé ce que vous vouliez. Un motif répété serait doc = "abc def ghi" comme un motif d'espaces non-espaces répétés, et vous voulez simplement en supprimer des espaces. Ce que vous avez demandé était plus technique que ce que vous vouliez. Et ce que vous vouliez demander est tellement évident qu'il n'est pas vraiment utile pour les gens et qu'il est tellement spécifique que ce n'est vraiment que pour votre cas spécifique, donc aucune utilité pour le site
barlop