空␣白
みたいな文字列に入った半角スペースは削除したいけど、<span␣style="">
##␣
みたいなHTMLやMarkdownの中の半角スペースは残したい。
そんな時に使える正規表現を書きました。
検索方法と解説
とりあえず検索&置換用の正規表現はこちら。
検索:
([^((0-9a-zA-Z)|(!-/:-@\[-`\{-~))]) ([^((0-9a-zA-Z)|(!-/:-@\[-`\{-~))])
置換:
$1$2
「数字と小文字英字と大文字英字、かつ、記号」に当てはまらない文字の間の半角スペースを指定して、半角スペースを消してくださいねっていう書き方です。
ちなみに、「HTMLは使わないのでTwitter␣と␣Facebook␣と␣Instagram
みたいな英字の間の半角スペースも消したい」っていう場合には、次が使えるかと。
検索:
([^(!-/:-@\[-`\{-~)]) ([^(!-/:-@\[-`\{-~)])
置換:
$1$2
参考にしたサイト
JeditでHTML中の全角文字に挟まれた半角スペースを削除する。 | デザイン事務所ダウンアンダー
今回の正規表現を書く時に参考にしたのは、こちらのサイト。そのままだと「#」記号を指定してくれなかったので、若干書き換えています。あとCotEditorでは\1\2
では置換されなかったので、$1$2
にしたらうまくいきました。
入力された文字列に含まれる空白文字を削除する方法 - JavaScript TIPSふぁくとりー
ちなみに、こちらのサイトを利用して/s
で検索→置換しようとしたら、改行も検索でヒットしてしまったのでダメでした。
そもそもやりたかったこと
この記事で書いたように、私はMacの音声入力をよく使うんですが、OSをアップデートしてから勝手に半角スペースが入るようになりまして。
しかもMarkdown記法を使っているもんですから、意図的に半角スペースを入れている部分もある。だから半角スペースを指定して一括置換するわけにもいかなかったのです。
そんなわけで、日本語の全角文字の間にある半角スペースだけを指定して、削除する正規表現を探しました。HTMLのコード中の半角スペースも除外されるので、ブロガーやライターには役立つはず。
2つめに紹介したやつは、Google音声入力で英単語の前後に入ってしまう半角スペースを一括削除するのにも使えるかも。