我在字符串中有以下内容:
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;
答案 0 :(得分:3)
事实证明,由于某些原因,“[.\\s]
”和“[.\\n]
”不起作用,但“(.|\\n)
”不起作用。以下是有效的:
strip[s_String] := StringReplace[s, re@"BEGINIGNORE(.|\\n)*ENDIGNORE" -> ""]
答案 1 :(得分:1)
尝试:
StringReplace[str, re["BEGINIGNORE(.|\\n)*ENDIGNORE"]->""]
答案 2 :(得分:1)
在正则表达式中插入(?s)
修饰符。这相当于Perl的/s
修饰符,是标准PCRE语法的一部分。
StringReplace[str, re["BEGINIGNORE(?s).*ENDIGNORE"]->""]
相关问题的答案中的更多细节: Bug in Mathematica: regular expression applied to very long string
答案 3 :(得分:0)
当你跟进时,你需要parens而不是方括号围绕你想要*
的表达式。
方括号在此定义一个字符类,就像在大多数正则表达式语言中一样。这就是为什么[.\\s]
没有按预期工作的原因,它代表一组字符而不是带括号的表达式。也许Mathematica使用[]表达式会让你思考这个方向吗?