2016-09-10 7 views
1

私は検索/置換コードを実行したいと思います。私はNotePad ++を使用していますが、可能性を広げてくれれば他の何かを使うことができます。私は達成するために必要としています何詳細RegEx交換式をお探しですか?

Asus Zenfone 4 
<DeviceId> 
<AndroidBoardName>EeePad 
<AndroidBootloader>unknown 
<DeviceBrand>asus 
<DeviceModel>WW_ZenFone 
<DeviceModelIdentifier>LRX21V 
<DeviceModelBoot>redhookbay 
<HardwareManufacturer>asus 
<HardwareModel>ASUS_T00I 
<FirmwareBrand>ASUS_T00I 
<FirmwareTags>release-keys 
<FirmwareType>user 
<FirmwareFingerprint>asus/WW_ZenFone/ASUS_T00I:5.0/LRX21V/WW_ZenFone-V7.4.4-20150831:user/release-keys 

それは次のように見えるようにすることです:

これは私が現在働いていることは何である

Asus Zenfone 4 
{ 
DeviceId = "", 
AndroidBoardName = "EeePad", 
AndroidBootloader = "unknown", 
DeviceBrand = "asus", 
DeviceModel = "WW_ZenFone", 
DeviceModelIdentifier = "LRX21V", 
DeviceModelBoot = "redhookbay", 
HardwareManufacturer = "asus", 
HardwareModel = "ASUS_T00I", 
FirmwareBrand = "ASUS_T00I", 
FirmwareTags = "release-keys", 
FirmwareType = "user", 
FirmwareFingerprint = "asus/WW_ZenFone/ASUS_T00I:5.0/LRX21V/WW_ZenFone-V7.4.4-20150831:user/release-keys", 
}, 

私は、これは正規表現を使用して可能であった期待していましたそれは高度な検索/置換メソッドです。ここで私はすべてを行う必要があると考えているものです:決算を探す

  1. 電話名の後に改行を追加して、開口部<を見つけ、
  2. それを削除{別の改行
  3. 続い挿入>と開閉後の単語の周り>
  4. <
  5. ラップ引用符を閉じる間のテキストを無視し、[スペース] = [スペース]
  6. と交換>
  7. 最後のqの後にカンマを追加uote
  8. 改行を追加し、挿入}、私は私の頭の上にいる場合は

は、ちょうど私に知らせてくださいと私はちょうど/ 1で、すべて1を貼り付けるコピーの手作業を行うに取得します。

+0

を追加あなたはそれを行うことができます2ステップで実行するか、コールバックを使用することができます。どちらもメモ帳では望めない/できないかもしれません++。 C#を使うと簡単にできます。 – sln

+0

2ステップアプローチはFind((?:<[^>)*>。*(?:\ r?\ n)*)+) '' \\ $ 1 \ n 'で置換して' <([^> ' '$ 1 =" $ 2 "、' $ 1 = "$ 2"を置き換えます。コールバック・アプローチでは、ステップ1を使用して$ 1をコールバックに渡します。ここで、文字列は '' {\ n "' + "\ n}"が返されます。 – sln

+0

これらの正規表現はそれぞれ、グローバル検索/置換で使用されます。別々に行うこともできますが、_Step1_を最初に実行する必要があります。だから、メモ帳では、それはマニュアルですが、2つのステップしか必要とせず、すべてのことを行う必要があります。 – sln

答えて

1

これは、ノートパッドの++で置換を有効にしての正規表現を使用して行うことができます。

(?:\G(?<!^)|(.+))\R<([^>]*)>(.*+)((?!\R<))?を検索し、(?{1}$1\r\n\{:)\r\n$2 = "$3",(?{4}\r\n\},:)と置き換えることができます。

検索パターンの内訳:

  • (?:\G(?<!^)|(.+))は - それは行の先頭でない場合は、前の試合の終わりにマッチ(\Gは、最初の実行中に、文字列の先頭と一致し)、または任意の文字に一致します(改行を除く)を1回以上繰り返し、グループ1に格納します。
  • \R<([^>]*)>(.*+)
  • は、 - 次いで、(グループ2に記憶されている)は>>した後(グループ3に記憶された)行の終わりまでの文字の任意の量
  • ない文字の任意の量、次いで、 <続く改行文字にマッチ

    • -
    • ((?!\R<))?は、次の行が<

    交換パターンの破壊から始まるされていない場合、空のグループ4を格納し10 - 条件付き置換:グループ1が存在する場合は、グループ1の内容を改行します(システムデフォルトの改行に応じて、\r\nの代わりに\nを使用します)

  • \r\n$2 = "$3", - 改行を追加グループ2の内容によっては、スペース=スペース、グループ3の最終的内容は、"囲ま
  • (?{4}\r\n\},:) - 条件付き置き換える:グループ4が存在する場合、改行と},
+0

文字列を置換するにはかなりかっこいい、条件付きです。コードを埋め込む全面的な場所。 – sln

+0

うわー、これは素晴らしいです!それは魅力のように働いて、何か良いことを求めることはできませんでした。これをまとめるにはどれくらいの時間がかかりましたか?私は、子供の遊びのようにこのようなことに取り組むためには、何年もRegExと仕事をしていたに違いないと思っています。あなたがこれのベストを学ぶために私に向けて指すことができる良い情報源。私はあなたが何をしたのか、そしてなぜそれを理解するのが本当に助けになったのか、それぞれのセクションが何をしたのかを含めてくれてうれしいです。 :) – XiCynx

+0

喜んでそれは助けた。私はhttp://www.regular-expressions.info/とJeffrey FriedlsのMastering Regular Expressionsから学びました。しかし、私を大いに助けてくれたのは間違いなくSOに参加していて、すばらしい男たちからの回答を読んでいます。あなたはNotepad ++(boost)[ここ](http://www.boost.org/doc/libs/1_61_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html)で使われている正規表現のフレーバーのドキュメントを見つけることができます。 [here](http://www.boost.org/doc/libs/1_61_0/libs/regex/doc/html/boost_regex/format/boost_format_syntax.html)を参照してください。 –

関連する問題