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