这是一次非常有趣的调试经历。你能发现以下两行代码之间的区别吗?
StringReplace["–", RegularExpression@"[\\s\\S]" -> "abc"]
StringReplace["-", RegularExpression@"[\\s\\S]" -> "abc"]
当您对它们进行评估时,它们会执行非常不同的操作。事实证明,这是因为第一行中要替换的字符串由一个Unicode短划线组成,而第二行则由一个普通的ASCII短划线组成。
对于Unicode字符串,正则表达式无法匹配。 我原本想使用“[\s\S]”表示“匹配任何字符(包括换行符)”,但Mathematica显然将其视为“匹配任何 ASCII 字符”。
我该如何修复正则表达式,使上面的第一行与第二行执行相同?或者,我可以先应用asciify过滤器到字符串上吗?
附注:Mathematica文档指出,它的字符串模式匹配是建立在Perl-Compatible Regular Expressions库(http://pcre.org)之上的,因此我遇到的问题可能并不特定于Mathematica。