LoginSignup
0
3

More than 5 years have passed since last update.

pythonで否定的先読みというのをつかいたい。

Posted at

前置き

【否定的先読み】については色々な方のサイトを参考にしたほうが良いと思います。

bcdという文字列が来たときは処理したいけど、
abcdという文字だったら処理したくない!
という感じのときに使うものらしいです。(多分)

サンプルコード

python 3.6.3ですが、他のバージョンでも動くんじゃないかなあ。

main.py
# coding: utf-8

import re
import sys

argvs = sys.argv

print(argvs)

print("argvs[1] : ",argvs[1])
print("type(argvs[1]) : ",type(argvs[1]))


if re.search(r'^(?!.*abcd).*(?=bcd|def).+$' ,argvs[1]):
    print("True")
else:
    print("False")

re.search(r'^(?!.*abcd).*(?=bcd|def).+$' ,argvs[1])
ここの^(?!.*abcd)が、abcdを除外するで、.*(?=bcd|def).+$
bcdとdefを検知するのような形になるみたいです。

実行ログ

ajitama-server$ python main.py "abc"
['main.py', 'abc']
argvs[1] :  abc
type(argvs[1]) :  <class 'str'>
False
ajitama-server$ python main.py "abcd"
['main.py', 'abcd']
argvs[1] :  abcd
type(argvs[1]) :  <class 'str'>
False
ajitama-server$ python main.py "bcd"
['main.py', 'bcd']
argvs[1] :  bcd
type(argvs[1]) :  <class 'str'>
True
ajitama-server$ python main.py "def"
['main.py', 'def']
argvs[1] :  def
type(argvs[1]) :  <class 'str'>
True

re.searchじゃなくてもre.matchを使ったほうがちゃんとできるかもしれませんが、
slackbotの正規表現はどうもmatchではなさそうだったのでこれで対処しました。

賢くないので、わかりにくいっす…。

0
3
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
0
3