繁体   English   中英

Mathematica StringReplace 替换包含换行符的 substring

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM