Это был увлекательный опыт отладки.
Можете ли вы определить разницу между следующими двумя строками?
StringReplace["–", RegularExpression@"[\\s\\S]" -> "abc"]
StringReplace["-", RegularExpression@"[\\s\\S]" -> "abc"]
Они делают совершенно разные вещи, когда вы их оцениваете. Оказывается, это потому, что строка, подлежащая замене в первой строке, состоит из черты unicode en dash, в отличие от простой старой черты ascii во второй строке.
В случае строки Unicode регулярное выражение не совпадает.
Я имел в виду, что регулярное выражение «[\ s \ S]» означает «соответствовать любому символу (включая символ новой строки)», но Mathematica, очевидно, рассматривает его как «соответствует любому ascii символу».
Как я могу исправить регулярное выражение, чтобы первая строка выше оценивала то же самое, что и вторая? Кроме того, есть ли фильтр asciify, который я могу сначала применить к строкам?
PS: Документация Mathematica гласит, что ее сопоставление с образцом строки построено поверх библиотеки Perl-совместимых регулярных выражений (http://pcre.org), поэтому у меня может быть проблема, не относящаяся к Mathematica.