これは魅力的なデバッグ体験でした。次の 2 行の違いがわかりますか?
StringReplace["–", RegularExpression@"[\\s\\S]" -> "abc"]
StringReplace["-", RegularExpression@"[\\s\\S]" -> "abc"]
あなたがそれらを評価するとき、それらは非常に異なることをします。これは、最初の行で置換されている文字列が、2 行目の単純な古い ascii ダッシュではなく、Unicode en ダッシュで構成されているためであることが判明しました。
Unicode 文字列の場合、正規表現が一致しません。正規表現 "[\s\S]" は「任意の文字 (改行を含む) に一致する」という意味ですが、Mathematica は明らかに「任意のASCII文字に一致する」として扱います。
上記の最初の行が 2 行目と同じように評価されるように正規表現を修正するにはどうすればよいですか? または、最初に文字列に適用できる asciify フィルターはありますか?
PS: Mathematica のドキュメントによると、その文字列パターン マッチングは Perl 互換の正規表現ライブラリ ( http://pcre.org ) の上に構築されているため、私が抱えている問題は Mathematica に固有のものではない可能性があります。