ど素人から毛を生やす。<延>

正規表現で「female」と「male」を区別する(特定文字列の否定)

Web > Other 2024年12月29日(最終更新:4日前)

どもです。
今回は正規表現の話。

とある画像ファイル名を一括置換するため、正規表現にかけたい。
画像名はこういった法則性になっている。(*は任意の半角アルファベットor数字)

****male_*.png
****female_*.png

このとき、

/^.+male_.+\.png$/

といった正規表現を行ってしまうと、「****male_*.png」「****female_*.png」の両方がマッチしてしまう。
かといって、

/^.+[^fe]male_.+\.png$/

こうしてしまうと、「statemale_1.png」のように、eやfだけで引っかかってしまい、要件を満たさない。
さて、特定位置に登場する複数の文字を否定するには、どうしたら良いのか。

/^.+(?<!fe)male_.+\.png$/

正解は、否定後読みを使用すること。
否定後読みとは、この場合でいう「male」の前が「fe」でないことをマッチする正規表現とのこと。

これを使用すれば、

○ ***emale_1.png
○ ***fmale_1.png
○ ***feemale_1.png
× ***female_1.png

といった感じに、「female」という文字列のみをマッチ失敗にすることができた。
問題解決。


なお、使用したソフトが否定後読みを受理してくれなかったもので、手動で「male」「female」を振り分けて変換することになったのでした。

コンプラどうこう煩い昨今の英語圏なんだから、この男女表記は変えてくれねーかなあ!!

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)