2017-10-10 16 views
3

この文字列またはこの文字列の一部を置き換えるために、引用符内の3番目の文字列を検索したいと思います。これは私が対処しなければならない典型的なラインです:行内のn番目の文字列内での文字列または部分文字列の検索

「/activities/absenceactivity/lang/#LANG_ID#/prop_dialog.php";"BA2_PD_SCR";"Opis dogodka」;「イベントの説明」;」 ";"; ";"; ";" "Descripcióndel evento"; ";"; ";";置き換え検索&を行うために、私は、「テキストと引用符のすべての発生を示していますが、私はちょうど三番目を取得したいと思い、この例では 『OPISのdogodka』「(* [^」])ことを知っている

崇高なテキストで。

問題は、引用符内の文字列の第三発生を見つけるの全部または単に部分的にそれを交換し、正規表現は「」も

を空

のためのソリューションを提供していることを確認することです

文字列。

ありがとうございます。

+0

可能な[正規表現:マッチn番目のオカレンス]の重複(https://stackoverflow.com/questions/28438693/regex-match-nth-occurence) – ashwin153

答えて

0

{}パターンの繰り返し:

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

Demo

あるいは、グローバル型の一致を使用して、第三試合を取ります。これは、スライスやループなどのロジックが必要になることがあります:

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

Demo 2

それとも、単に手動でスキップする最初の二つのパターンに入れる:

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

Demo 3

するか、繰り返しを組み合わせます最初のn-1をスキップしてからn番目の一致をキャプチャします。

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

Demo 4

1

私はこれをさらに簡素化する方法があると確信しているが、あなたは、ブルートフォースでOKなら:

崇高コマンド:

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

NP ++:sedを

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

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

崇高コマンド: "[^"] * ";" ["^] *"; "([^"] *) "。*は行全体を見つけますが、$ 1のことはわかりません。私は3番目の引用符の位置で特定の文字列を置き換える必要があります。時にはこれは "引用符内の文字列全体"であり、場合によっては文字列 "s"などの部分文字列です。 – andrej

+0

検索文字列のかっこに注目してください。 '$ 1'は、検索文字列の最初の括弧セットのデータを表します。 http://www.grymoire.com/Unix/Regular.html#uh-10 – CoreyJJohnson

+0

@andrej希望の交換結果の例を書くのに役立つかもしれません。 – CoreyJJohnson

関連する問題