[英]Mathematica StringReplace to replace a substring containing newlines
我在字符串中有如下内容:
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;
事实证明,由于某种原因,“ [.\\s]
”和“ [.\\n]
”不起作用,但“ (.|\\n)
”起作用。 所以以下工作:
strip[s_String] := StringReplace[s, re@"BEGINIGNORE(.|\\n)*ENDIGNORE" -> ""]
在正则表达式中插入(?s)
修饰符。 这相当于 Perl 的/s
修饰符,并且是标准PCRE语法的一部分。
StringReplace[str, re["BEGINIGNORE(?s).*ENDIGNORE"]->""]
相关问题的答案中的更多详细信息: Mathematica 中的错误:正则表达式应用于非常长的字符串
尝试:
StringReplace[str, re["BEGINIGNORE(.|\\n)*ENDIGNORE"]->""]
在您跟进时,您需要在您想要*
的表达式周围使用括号而不是方括号。
方括号在这里定义了一个字符 class ,就像在大多数正则表达式语言中一样。 这就是为什么[.\\s]
不能按预期工作的原因,它代表一组字符而不是括号表达式。 也许 Mathematica 将 [] 用于表达式让您朝那个方向思考?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.