1

文字列に次のようなものがあります。

blah blah

BEGINIGNORE
   this stuff should get stripped out
ENDIGNORE

more stuff here

これを実行したいと思います(perl構文):s/BEGINIGNORE。*ENDIGNORE// s-つまり、BEGINIGNOREとENDIGNOREの間のすべてを削除します。あなたは以下がMathematicaでそれをするだろうと思うでしょう:

StringReplace[str, re["BEGINIGNORE[.\\s]*ENDIGNORE"]->""]

しかし、そうではありません。Mathematicaでこれを行うにはどうすればよいですか?

PS:私は次のエイリアスを定義します: re = RegularExpression;

4

4 に答える 4

3

何らかの理由で「[.\\s]」と「[.\\n]」は機能しませんが、「(.|\\n)」は機能することがわかりました。したがって、次のように機能します。

strip[s_String] := StringReplace[s, re@"BEGINIGNORE(.|\\n)*ENDIGNORE" -> ""]
于 2009-03-31T21:36:57.307 に答える
1

試す:

StringReplace[str, re["BEGINIGNORE(.|\\n)*ENDIGNORE"]->""]
于 2009-03-31T21:45:45.567 に答える
1

(?s)修飾子を正規表現に挿入します。これは Perl の/s修飾子に相当し、標準のPCRE構文の一部です。

StringReplace[str, re["BEGINIGNORE(?s).*ENDIGNORE"]->""]

関連する質問に対するこの回答の詳細: Mathematica のバグ: 非常に長い文字列に適用される正規表現

于 2010-05-25T14:43:19.620 に答える
0

フォローアップすると、必要な式を角括弧ではなく括弧で囲む必要があります*

ほとんどの正規表現言語と同様に、角括弧は文字クラスを定義します。その[.\\s]ため、期待どおりに機能しません。括弧で囲まれた式ではなく、一連の文字を表します。Mathematica で式に [] を使用したことで、その方向性を考えるようになったのではないでしょうか?

于 2009-04-01T16:14:50.817 に答える