这是一次令人着迷的调试体验。你能看出以下两行之间的区别吗?
StringReplace["–", RegularExpression@"[\\s\\S]" -> "abc"]
StringReplace["-", RegularExpression@"[\\s\\S]" -> "abc"]
当您评估它们时,它们会做非常不同的事情。事实证明,这是因为第一行中被替换的字符串由一个 unicode 破折号组成,而不是第二行中的普通旧 ascii 破折号。
对于 unicode 字符串,正则表达式不匹配。我的意思是正则表达式“[\s\S]”的意思是“匹配任何字符(包括换行符)”,但 Mathematica 显然将其视为“匹配任何ascii字符”。
如何修复正则表达式,以便上面第一行的计算结果与第二行相同?或者,是否有一个 asciify 过滤器可以先应用于字符串?
PS:Mathematica 文档说它的字符串模式匹配是建立在 Perl 兼容的正则表达式库(http://pcre.org)之上的,所以我遇到的问题可能不是 Mathematica 特有的。