LoginSignup
1
2

More than 5 years have passed since last update.

指定文字を前後に含まないKEYを検索する

Posted at

パターン

(?<![指定文字])KEY(?![指定文字])

何ができるか

タイトルのとおり、指定文字を前後に含まないKEYを検索します。
KEYだけヒットします。置換には適さないかもしれません。

サンプル

(?<![\w"'])[\d\.]+(?![\w"'])

前後に[\w"']がない[\d\.]+を検索します。1

結果

image.png
超テキトーなテストですが上手くいきました。2

経緯

業務でホスト系システムを触っていたのですが、固定長ファイルやCSVの走査をする必要がありました。
文字列数値ではなく、数値項目が欲しかったため作りました。

要は"123"ではなく123が欲しいということ。

もっと簡単なパターンがあると思いますが、これはこれで汎用性が高そうなのでご活用ください。

え?逆パターンが欲しい?

おまかせあれ、否定を肯定に変えるだけで・・・

逆パターン

(?<=[\w"'])[\d\.]+(?=[\w"'])

結果

image.png
なんか思っていたんと違う!!!!

それもそのはず\w文字、数値、アンダースコアのいずれかにヒットするからです。3

正しい逆パターン

(?<=["'])[\d\.]+(?=["'])

結果

image.png
これで無事に文字列数値が取得できました。
めでたしめでたし。


最後に

今回しれっと書いていた(?<!pattern)を始めとした「先読み・後読み」は正規表現を上手く使うためにかな~り重要です。
正直、完全には理解できていないので、自分の知識が固まったら記事にしようと思います。

参考

良い記事を書くためのガイドライン
正規表現メモ
正規表現の先読み・後読みを極める!


  1. \.で小数点も含めていますが、リージョンによって小数点記号は変わるので注意。あれ、そのリージョンのcsvはどう出るんだ? 

  2. 水色背景色のブロックがヒットした文字列です 

  3. 便利だからとよくわからずに使うと痛い目を見る 

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2