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

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

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

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

Q&A

解決済

3回答

16871閲覧

pythonの正規表現で「特定の文字列を含まない」ファイルを探したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2018/08/24 03:32

python 3.xで以下の検索をしたいです.

例えば以下の5つのファイルが存在しているとき,文字「b」を含まず且つ「a」を含むファイルを検索したいです.

  • ID1_a.txt
  • ID1_ba.txt
  • ID2_a.txt
  • ID2_ba.txt
  • c.txt

file = glob.glob('*a.txt')だとc.txt以外のファイルパスが取得できますが,実現したいことは「ID1_a.txt」と「ID2_a.txt」の2つのファイルの取得となります.

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

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

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

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

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

guest

回答3

0

ベストアンサー

しばしば誤解されていますが、
globの引数として用いることができるのは正規表現ではなく、ワイルドカードを含んだ文字列です。


正規表現を持ち出さずとも、in演算子で帰属をチェックすれば済むように思います。
未検証ですが、こんな感じで。

Python

1filenames = [] 2for filename in glob.iglob('*'): 3 if 'b' in filename: 4 continue 5 if 'a' in filename: 6 filenames.append(filename)

リスト内包表記を使っても良いです。

Python

1filenames = [ 2 filename for filename in glob.iglob('*') 3 if 'b' not in filename and 'a' in filename 4]

省メモリの観点でglob.iglobを用いていますが、glob.globでも問題は無いです。

投稿2018/08/24 03:41

編集2018/08/24 03:52
LouiS0616

総合スコア35676

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

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

退会済みユーザー

退会済みユーザー

2018/08/24 03:59 編集

ありがとうございます!目的が達成されることを確認しました. また,glob引数と正規表現についてコメントありがとうございました.どの部分の知識が足りてないかわかると検索もしやすくなり助かります.
guest

0

Python

1# -*- coding: utf-8 -*- 2from glob import iglob 3for filename in iglob('ID*_a.txt'): 4 print(filename) 5

こういうことではなく?

投稿2018/08/24 04:03

umyu

総合スコア5846

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

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

0

「後読み言明」を使えばいいのではないでしょうか。

python

1 2a = ["ID1_a.txt", "ID1_ba.txt", "ID2_a.txt", "ID2_ba.txt", "c.txt"] 3b = [x for x in a if re.search(r"(?<!b)a.txt", x)] 4print(b)

投稿2018/08/24 03:58

KojiDoi

総合スコア13727

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

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

KojiDoi

2018/08/24 04:00

ああ、ちょっと条件を読み違えていたようですね……
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問