2016-05-27 17 views
1

["で始まり、"]で終わる巨大なテキストからすべての一致を抽出する必要があります。これらの特殊文字は、各レコードをデータベースから分離します。私はすべてのレコードを抽出する必要があります。正規表現の先頭と末尾に特殊文字

このレコードの中に文字、数字、-.&()/{space}またはそのような特殊文字があります。
私はこれをOffice VBAに書いています。
これまでのパターンは、次のようになりました。.Pattern = "[[][""][a-z|A-Z|w|W]*"
このパターンでは、各レコードから最初の単語を抽出することができます。開始文字は["です。見つかった一致の数は正しいです。一つのレコードの
例: ["blabla","blabla","blabla","\u00e1no","nie","\u00e1no","\u00e1no","\u00e1no","\u003Ca class=\u0022btn btn-default\u0022 href=\u0022\u0026#x2F;siea\u0026#x2F;suppliers\u0026#x2F;42\u0022\u003E\u003Ci class=\u0022fa fa-pencil\u0022\u003E\u003C\/i\u003E Upravi\u0165\u003C\/a\u003E \u003Ca class=\u0022btn btn-default\u0022 href=\u0022\u0026#x2F;siea\u0026#x2F;suppliers\u0026#x2F;form\u0026#x2F;42\u0022\u003E\u003Ci class=\u0022fa fa-file-pdf-o\u0022\u003E\u003C\/i\u003E Zmluva\u003C\/a\u003E \u003Ca class=\u0022btn btn-default\u0022 href=\u0022\u0026#x2F;siea\u0026#x2F;suppliers\u0026#x2F;crz-form\u0026#x2F;42\u0022\u003E\u003Ci class=\u0022fa fa-file-pdf-o\u0022\u003E\u003C\/i\u003E Zmluva CRZ\u003C\/a\u003E"]

質問は:どのように私はすべてのレコードが["で始まり、"]で終わる抽出することができますか?
開始文字と終了文字は必要ありませんが、後でそれを消去できます。
ありがとうございました。

+1

リーディング/トレーリング '[ "'と'"]'とスプリットを削除''、 ''と一緒に。 –

+0

レコードを分割するものは何ですか? '、'、 ';'のどちらかですか? –

+0

'、'はレコードを区切ります。 –

答えて

1

最も簡単な方法は、(VBAで、""",""")初期及びReplaceまたはLeft/Right/Mid機能、および","と、その後Splitいずれかで[""]末尾を取り除くことです。

など。

input = "YOUR_STRING" 
input = Replace(Replace(input, """]", ""), "[""", "") 
result = Split(input, """,""") 

あなたは正規表現を使用する場合は、あなたが\["[\s\S]*?"]パターンを使用することができますが、それは、長い入力を持つことは効率的ではないと、タイムアウトの問題が発生した場合でも、マクロをフリーズすることがあります。それを展開することができます

\["[^"]*(?:"(?!])[^"]*)*"] 

regex demoを参照してください。この展開されたパターンで、あなたも改行問題をマッチングドットのための回避策を使用する必要がないことをVBAで、Pattern = "\[""[^""]*(?:""(?!])[^""]*)*""]"

注意(否定文字クラス[^"]は改行を含む任意の文字に一致しますが")。

パターンは詳細:

  • \[" - 文字通り
  • ["
  • [^"]* - ゼロ以上の文字その他の"より
  • (?:"(?!])[^"]*)*から-
    • "(?!])のゼロ以上の配列10 ]
    • [^"]*と続かない - "
  • "]以外のゼロ以上の文字 - リテラル文字列"]
関連する問題