BBD

「昨日の自分に教えたいこと」をテーマに書き散らしてます

全角文字の間の半角スペースを正規表現で一括削除する(HTMLやMarkdownで使う半角スペースは削除しない)

f:id:rough-maker-an9:20210715120703j:plain

空␣白みたいな文字列に入った半角スペースは削除したいけど、<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で検索→置換しようとしたら、改行も検索でヒットしてしまったのでダメでした。

そもそもやりたかったこと

nogunori.com

この記事で書いたように、私はMacの音声入力をよく使うんですが、OSをアップデートしてから勝手に半角スペースが入るようになりまして。

しかもMarkdown記法を使っているもんですから、意図的に半角スペースを入れている部分もある。だから半角スペースを指定して一括置換するわけにもいかなかったのです。

そんなわけで、日本語の全角文字の間にある半角スペースだけを指定して、削除する正規表現を探しました。HTMLのコード中の半角スペースも除外されるので、ブロガーやライターには役立つはず。

2つめに紹介したやつは、Google音声入力で英単語の前後に入ってしまう半角スペースを一括削除するのにも使えるかも。