pinzu_1.png という文字列から
pinzu と
1 という文字列を抜き出したい時の
正規表現が難しかったのでメモ。
pythonで試していますが、正規表現なので他の言語でも
もちろん応用できるかと。
#上手くいかないパターン
pinzu_1.pngとう文字列内の「pinzu」は、
先頭から「_」の間となります。
先頭を表す文字は「^」なので、マッチパターンは
'^.*_'
でいいかなーと思って動かしてみましたが結果は…
python.py
>>> import re
>>> re.search('^.*_', 'pinzu_1.png').group()
'pinzu_'
「_」まで入ってきちゃいました…。
#上手くいくパターン
正規表現には「先読み」「後読み」というのがあります。
今回のパターンはそれを利用すると上手くできました!
表記 | 意味 |
---|---|
(?=abc) | 先読み |
(?!abc) | 否定先読み |
(?<=abc) | 後読み |
(?<!abc) | 否定後読み |
python.py
>>> import re
>>> re.search('^.*(?=_)', 'pinzu_1.png').group()
'pinzu'
>>> re.search('(?<=_).*(?=\.)', 'pinzu_1.png').group()
'1'
やりたいこと通りにプログラムが動くと嬉しいですね!