質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

638閲覧

文字列の判定について

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/05 02:10

文字列の検索、判定について悩んでおります。
下記、arp -aを行い、成功/失敗を判定したいのですが、どうも、if文ですべて「TRUE」になってしまいます。
原因が分からず、困っております。
どなたかご教示ください。
よろしくお願い致します。

python

1arp_res = subprocess.run(['arp', '-a', '8.8.8.8'], stdout=subprocess.PIPE) 2arp_result = arp_res.stdout.decode('cp932') 3print(arp_result) 4if re.match('^ARP', arp_result) != arp_result: # arp -a 失敗時(MACアドレスが得られなかった場合)の結果は、ARP エントリが見つかりませんでした。 5 6 # arp -a 成功時の処理 7else: 8 # arp -a 失敗時の処理 9

その他、判定に試したif文は、以下2つとなります。

python

1 # if arp_result.find('エントリ') != arp_result: 2 # if arp_result.find('インターネット') or arp_result.find('internet') != -1:

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

re.matchの返り値は文字列ではなく、マッチした文字列(複数あるかも)やマッチした位置などを含むオブジェクト(matchオブジェクト)です。ですから、文字列arp_resultとの比較は常に「等しくない」ことになります。

また、re.matchは、対象となる文字列の先頭から比較を行なうため、正規表現パターンに^は不要です。途中も含めて検索するときはre.searchを使います。

re.matchを使うのであれば、返り値がマッチに失敗したときのNoneであるかをチェックすればいいでしょう。

Python

1import subprocess 2import re 3 4arp_res = subprocess.run(['arp', '-a', '8.8.8.8'], stdout=subprocess.PIPE) 5arp_result = arp_res.stdout.decode('cp932') 6print(arp_result) 7 8if re.match('ARP', arp_result) is None: 9 # arp -a 成功時の処理 10 print("成功時の処理") 11else: 12 # arp -a 失敗時の処理 13 print("失敗時の処理")

str.findを使うのであれば、str.findの返り値は最初に見つかった文字列の位置(先頭は0)で、見つからなかった場合の返り値は-1です。if文の条件式を、

diff

1-if re.match('ARP', arp_result) is None: 2+if arp_result.find('ARP') != 0:

としてやれば、文字列先頭に「ARP」が書いていない場合(文字列中に「ARP」が含まれていない場合も、2文字目以降に含まれている場合も含めて)に条件が成立します。

投稿2021/09/05 02:32

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

startswith メソッドを使うとわかりやすいと思います。

Python

1if arp_result.startswith('ARP'): 2 # arp -a 成功時の処理 3else: 4 # arp -a 失敗時の処理

投稿2021/09/05 03:07

lehshell

総合スコア1147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問