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 回答