• ベストアンサー

正規表現について

VBSでRegExpで文字を抽出したいのですが、上手くいきません。 *****abc******** ************} *は不確定の文字で、キーワードはabcと}です。がabcの先頭行から}までの複数行を 抽出したいです。 re.Pattern = "[^*].*abc.*}" だと上手く動きません。 よろしくお願いします。

  • devid
  • お礼率34% (166/478)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

一応、パターンを4つ用意しました。 おそらく最初ので十分だと思うので蛇足ですが。 devidさんの作成した "[^*].*abc.*}" の意味は以下のようになるので、[^*]は ほぼ無意味です。 *以外の1文字、色々な文字いっぱい、abc、色々な文字いっぱい、}で終わり なお . に改行は含まれません。 改行にマッチさせるためには提示したコードのようにするか、明示的に (.|\n) のように改行を含める必要があります。 S1=_ "****" & vbCrLf &_ "*****abc********" & vbCrLf &_ "************}" & vbCrLf &_ "++++++++" & vbCrLf &_ "++++++++++abc++" & vbCrLf &_ "++}++++++" & vbCrLf &_ "@}@}@@@" & vbCrLf &_ "XXXXX" Set R=CreateObject("VBScript.RegExp") R.Global=True R.Pattern=".*abc[^}]*}" 'abc以降、最初の } まで 'R.Pattern=".*abc[^}]*}.*" 'abc以降、最初の } がある行の最後まで 'R.Pattern=".*abc[\s\S]*}" 'abc以降、最後の } まで 'R.Pattern=".*abc[\s\S]*}.*" 'abc以降、最後の } がある行の最後まで Set M=R.Execute(S1) S2=M.Count & "個" & "にマッチ" For I=0 to M.Count-1 S2=S2 & vbCrLf & vbCrLf & "Index=" & I & vbCrLf & M(I) Next WScript.Echo S2

devid
質問者

お礼

できました。有難うございます。

その他の回答 (1)

  • jin34
  • ベストアンサー率80% (17/21)
回答No.1

「abcの先頭行から}までの複数行を抽出したいです。」の意味がよくわからないのですが、 構文としては re.Pattern = "^.*abc.*}$" でしょうか。 似たような質問に最近回答していますのでそちらを参照してください。

参考URL:
http://okwave.jp/qa/q7979844.html
devid
質問者

補足

re.Pattern = "^.*abc.*}$"で動きません。。 abcの先頭行からとは、 **** ****abc**** ****} のばあい、 上は無視して ****abc**** ****}のみ抽出という意味です。 ちなみに"[^*].*abc"だと ****abcまでは抽出できています。。

関連するQ&A

  • VBAで改行の入ったデータの正規表現について

    vbaで複数行のデータの一部を抜き出そうと思っています。 下記のようにすると、抜き出したデータの先頭に改行がついてしまいます。 何かいい方法はないでしょうか。 data = "start" & vbCrLf  & "ABC" & vbCrLf & "DEF" & vbCrLf & "GHI" & vbCrLf & "end" Set re = New RegExp re.Pattern = "start((.|\n)*?)end" re.MultiLine = True Set mc = re.Execute(data) For i = 0 To mc.Count - 1 MsgBox m.SubMatches(0) Next i 上記を実行すると vbCrLf  & "ABC" & vbCrLf & "DEF" & vbCrLf & "GHI" & vbCrLf となってしまいます。 ”ABC”から抜き出す場合、正規表現をどう書けばいいのでしょうか。 よろしくお願いします。

  • 正規表現

    テキストファイルからコメント行以外から文字列"bbb"を含む 行をgrepで抽出したいと思っております。 コメント行→"#"で始まる行と"--"で始まる行 先頭にスペースがある場合もあるので、結局 先頭に「0個以上のスペース+("#"or"--")」がある行は対象外 として、文字列"bbb"を含む行をgrepで抽出したいと思っています。 下記、foo.txtの中から下記の抽出対象の2行のみを抽出したい場合、 どういった正規表現を書けばいいか教えてください。 【foo.txt】 aaa bbb → 抽出対象 aaa bbb →抽出対象 # aaa # bbb →抽出対象外 #aaa # aaa --aaa --aaa -- aaa -- bbb →抽出対象外 -aaa -bbb - aaa ご存じの方がいらっしゃいましたら、よろしくお願い致します。

  • VBSで正規表現キーワード複数は?

    すみません、VBSの正規表現で改行をまたぐ検索をしたいのですが キーワードが複数の場合はどう書けばいいのでしょうか? 例:xxxxxabcxxxxxxxx改行 xxxxxefgxxxxxxxxxxx改行 xxxxxxLxxxx xは不定期文字 キーワード abc , efg , L .*abc[^efg][^L]*efg*L.*とやってもだめでした。 よろしくお願いします。

  • VBAで正規表現を使った置き換え

    ”KFEGYKLNI"のような長い文字列の文字の間に".*"を入れて"K.*F.*E.*G.*Y.*K.*L.*N.*I”のような検索パターンを作りたいのですが".*"を簡単に入れる方法を教えてください。 excel2003を使っています。 Set re = CreateObject("VBScript.RegExp") re.replace("s//\.\*/g","KFEGYKLNI") としてみましたがうまくいきません。 またhelpをどのような語句で検索したよいのでしょうか

  • 正規表現を使った置換処理。大文字の直前に「_」を入れたい

    正規表現を使った置換処理です。 大文字の直前に「_」を入れたいと思っています。 例:htmlLinkStr → html_Link_Str WSHとして以下のようなコードを1行記述しました。 WScript.Echo("htmlLinkStr".replace(/([A-Z]+)/g, "_" + RegExp.$1)); しかし「html_ink_tr」としょぼい結果しかえられません。 「RegExp.$1」の使い方が悪いのかもしれません…。 ちなみにVBSでは以下のコードで成功しています。 ので大きくはずしてはいないと思うのですが… Set regEx = New RegExp regEx.Pattern = "([A-Z]+)" regEx.Global = True MsgBox regEx.Replace("htmlLinkStr", "_$1") JavaScriptでの正規表現の使い方に詳しい方よろしくお願いします。

  • 正規表現を教えてください。

    SPAMの自動削除をするツールを使っています。 RE:という3文字だけのタイトルのメールがきたら削除させたいのですが、私の使っているツールはRE:という文字を指定するとRE:が先頭に付いているタイトルのメールを全て削除してしまいます。 つまり指定した文字を含むという条件だけが指定可能で、指定した文字と長さも一致という条件は指定できません。 ただ、このツールは正規表現も使用できるようです。 そこで、RE:という3文字だけの時は真となり、RE:の後ろに文字が付いているときには偽となる正規表現を教えてください。

  • 正規表現について

    VB6ですが・・・ '次のようなコードがあって <!-- と --> に囲まれる文字列を抜き出したのですが 'どのようなパターンマッチを書けばいいのでしょうか? 'HTMLのコメントのみを抜き出したいと思っています。 Const s = "<!--今日-->" _ & "<!--僕は--><!--正規表現を--><!--勉強します-->" Dim x As RegExp Dim v As match Set x = New RegExp x.Pattern = "パターン" x.Global = True For Each v In x.Execute(s) Debug.Print v.Value Next

  • VBAの正規表現について教えてください

    文章に含まれる下記文字を抽出したいのですが、書き方を教えてください。 抽出したい文字 「#hogehoge 」  の「#」から最後の「半角スペース」までです。 上記文字が含まれている文章は こんにちは #aiuoeo さん、#kakikukeko さん、私は・・・・ #hogehoge 先日の・・・ などの文章です。 先頭が必ず#とは限らず、最後も半角スペースではないので、 ^#.*$/sなどではありません。 また、1回とは限らず複数回でてくることもあります。 正規表現で書くことは可能なのでしょうか。 初歩的な質問で大変申し訳ありませんが、どうぞ宜しくお願いいたします。

  • VBS 正規表現の記号

    VBSで、一行単位で行読込みを行いましたが、特定の箇所を抜き出しがうまく出来ません。 例えば、行読込みにて下記一行が読み込まれた場合  abc "efg" abcの後の"~"の間、efgを抜き出したい場合、正規表現としてどのようになるのか、何方かご教授ください。

  • [Ecxel VBA] 山括弧(>)のエスケープ

    Excel2003のVBAで、以下の例のようにHTMLタグ内の強制改行を<br />に置換するマクロを組みたいです。 ▼置換前 <ul> <li>あああ いいい</li> <li>ううう</li> </ul> ▼置換後 <ul> <li>あああ<br /> いいい</li> <li>ううう</li> </ul> 以下のようにVBAを書いてみましたが、置換パターンが認識せず困っています。 ============================= Dim re As Object Set re = CreateObject("VBScript.RegExp") re.IgnoreCase = True ' 大文字小文字を区別しない re.Global = True ' 複数回マッチする re.MultiLine = True '複数行マッチ re.Pattern = ">(\n){1,}<" ' 正規表現のパターン buf = re.Replace(buf, ">@@BRにしない改行@@<") ' 置換 ' ここで、残った改行コードを <br /> に置換する(ソース省略) ' ここで、「@@BRにしない改行@@」を改行コードに戻す置換をする(ソース省略) ============================= テキストエディタでこの正規表現パターンを使えばできたのですが、 Excel VBAでは、この正規表現パターンで抽出できませんでした。 re.Pattern = "\>(\n){1,}\<" のようにエスケープしてみてもだめでした。 先頭の「>」をトルとパターンを認識したため、先頭の「>」が原因かと 思っているのですが解決方法を見つけることができませんでした。 エスケープ方法が不適切なのでしょうか? 解決策をご教示いただけると幸いです。よろしくお願いいたします。

専門家に質問してみよう