gpt4 book ai didi

regex - Mathematica中的错误: regular expression applied to very long string

转载 作者:行者123 更新时间:2023-12-04 03:31:11 26 4
gpt4 key购买 nike

在以下代码中,如果将字符串s追加为10或2万个字符,则Mathematica内核seg错误。

s = "This is the first line.
MAGIC_STRING
Everything after this line should get removed.
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890123456789012345678901234567890
...";

s = StringReplace[s, RegularExpression@"(^|\\n)[^\\n]*MAGIC_STRING(.|\\n)*"->""]

我认为这主要是Mathematica的错,我已经提交了错误报告,如果得到回应,将在这里进行跟进。但是我也想知道我是不是以一种愚蠢/低效的方式来做到这一点。即使不是这样,解决Mathematica错误的想法也将受到赞赏。

最佳答案

Mathematica使用PCRE语法,因此它确实具有/s aka DOTALL aka Singleline修饰符,您只需将(?s)修饰符放在要应用它的表达式部分之前。

请参阅此处的RegularExpression文档:(展开标有“更多信息”的部分)
http://reference.wolfram.com/mathematica/ref/RegularExpression.html

The following set options for all regular expression elements that follow them:
(?i) treat uppercase and lowercase as equivalent (ignore case)
(?m) make ^ and $ match start and end of lines (multiline mode)
(?s) allow . to match newline
(?-c) unset options



使用15,000个字符长的字符串,此修改后的输入对我来说不会使Mathematica 7.0.1崩溃(原始崩溃),并产生与表达式相同的输出:
s = StringReplace[s,RegularExpression@".*MAGIC_STRING(?s).*"->""]
由于@AlanMoore解释的原因,它也应该更快一些

关于regex - Mathematica中的错误: regular expression applied to very long string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com