2017-10-10 2 views
3

Je souhaite trouver la troisième occurrence de chaîne entre guillemets afin de remplacer cette chaîne ou une partie de cette chaîne. Ceci est une ligne typique, je dois traiter:Recherche de la chaîne ou de la sous-chaîne dans la nième occurrence d'une ligne

"/activities/absenceactivity/lang/#LANG_ID#/prop_dialog.php";"BA2_PD_SCR";"Opis dogodka"; "Description de l'événement"; » Descrição do Evento ";" ÐÐ¿Ð¸Ñ Ð¿Ð¾Ð'ÑÑ ";" ";" č®vykio aprašymas ";" Descripción del evento ";" ";

Je sais que « ([^ »] *) » montre toutes les occurrences du texte et des citations, mais je voudrais obtenir juste le troisième, dans cet exemple « Opis dogodka » afin d'effectuer une recherche & Remplacer dans le texte Sublime.

problème est de trouver la troisième occurrence de chaîne dans les guillemets, le remplacer entièrement ou tout simplement partiellement et assurez-vous que le Regex fournit également une solution pour un vide

« »

chaînes.

Merci.

+0

double possible de [RegEx: match n-ième occurence] (https://stackoverflow.com/questions/28438693/regex-match-nth-occurence) – ashwin153

Répondre

0

Vous pouvez utiliser {} répétition du motif:

/(?:"([^"]*)";){3}/ # first match group will be 'Opis dogodka' 

Demo

Ou, utilisez un match de type global, puis prendre le troisième match. Cela pourrait nécessiter une logique telle que le découpage ou looping:

/"([^"]*)";/g 

Demo 2

Ou, vient de mettre la main dans les deux premiers motifs de sauter:

/^"[^"]*";"[^"]*";("[^"]*";)/ 

Demo 3

Ou combiner répétition pour sauter le premier n-1 puis capturer le nième match:

/^(?:"[^"]*";){2}("[^"]*";)/ 

Demo 4

1

Je suis sûr qu'il ya des façons de simplifier davantage, mais si vous êtes ok avec la force brute:

commande Sublime:

Find: "[^"]*";"[^"]*";"([^"]*)".* 
Replace: $1 

NP ++:

Find what: "([^"]*)";"([^"]*)";"([^"]*)".* 
Replace with: $3 

sed :

sed 's/"\([^"]*\)";"\([^"]*\)";"\([^"]*\)".*/\3/' 
+0

commande Sublime: "[^"] * ";" [^ "] *"; "([^"] *) ". * trouve toute la ligne mais je ne sais pas ce que $ 1 fait.J'ai besoin de remplacer une chaîne particulière dans la troisième position de la citation et parfois c'est "toute la chaîne entre guillemets" et dans certains cas juste une sous-chaîne, par exemple juste le caractère "s". – andrej

+0

Notez la parenthèse dans la chaîne de recherche. '$ 1' représente les données du premier ensemble de parenthèses de la chaîne de recherche. Consultez http://www.grymoire.com/Unix/Regular.html#uh-10 – CoreyJJohnson

+0

@andrej Il peut vous aider à écrire un exemple du résultat de remplacement souhaité. – CoreyJJohnson