0

重複の可能性:
Pythonでテキストが「空」(スペース、タブ、改行)であるかどうかを確認するにはどうすればよいですか?

ファイル内のテキスト行を処理する短い関数を作成しようとしています。重要なコンテンツ(空白だけではないことを意味する)を含む行に遭遇した場合、その行で何かを行うことです。私が欲しかった制御構造は

if '\S' in line: do something

また

if r'\S' in line: do something

(二重引用符を使用して同じ組み合わせを試しましたが、reをインポートしました。)上記のifステートメントは、試したすべての形式で、常にFalseを返します。結局、私はテストに頼らなければなりませんでした

if re.search('\S', line) is not None: do something

ifこれは機能しますが、単純なステートメントに関連して少し不器用に感じます。それでは、私の質問は、なぜifステートメントが機能しないのか、そして(一見)エレガントでシンプルなことをする方法があるのか​​ということです。

制御構造とは関係のない別の質問がありますが、正規表現の違法な使用の可能性にも関係しているのではないかと疑われているので、ここで質問します。文字列がある場合

s = "\ t\tいくつかのテキスト\t\ n \ n"

コード

s.strip('\s')

スペース、タブ、および改行を含む同じ文字列を返します(r'\ s'も同じです)。コード

s.strip()

「テキスト」を返します。これは、文字列なしで呼び出されたstripがデフォルトで空白文字を削除するように設定されている場合でも、私の考えでは、これはまさに「\s」という表現が行っていることです。一方が空白を削除し、もう一方が削除しないのはなぜですか?

ご説明いただきありがとうございます。

4

4 に答える 4

2

rePython 文字列関数は正規表現を認識しないため、使用する場合はモジュールを使用する必要があります。

ただし、文字列が完全に空白であるかどうかを調べることのみに関心がある場合は、次のstr.isspace()関数を使用できます。

>>> 'hello'.isspace()
False
>>> '  \n\t  '.isspace()
True
于 2012-05-22T21:24:53.647 に答える
1

行が空白文字のみで構成されているかどうかを知りたいだけの場合、正規表現は少しやり過ぎです。代わりに次のものを取得する必要があります。

if text.strip():
    #do stuff

これは基本的に次と同じです:

if not text.strip() == "":
    #do stuff

Python は、空でないすべての文字列を に評価しTrueます。したがってtext、空白文字のみで構成されている場合は、text.strip()等しい""ため、 と評価されFalseます。

于 2012-05-22T21:21:38.053 に答える
1

これはあなたが探しているものです

if not line.isspace(): do something

また、str.strip正規表現は使用しません。

于 2012-05-22T21:19:07.423 に答える
0

この式は、他のテスト'\S' in lineと同じことを行います。string in line左側の文字列が右側の文字列内にあるかどうかをテストします。正規表現を暗黙的にコンパイルして一致を検索するわけではありません。これは良いことです。ユーザーが入力した正規表現を操作するプログラムを作成していて、入力式にサブ式 like が含まれているかどうかを実際\Sにテストしたい場合はどうでしょうか?

同様に、 のドキュメントを読んでくださいstr.strip。入力を正規表現として扱い、一致する文字列を削除すると言っていますか? いいえ。正規表現を使って何かをしたい場合は、実際にPythonにそれを伝える必要があります。今回は正規表現を意味し、他の場合は単なる文字列を意味していると推測することを期待しないでください。正規表現の検索は文字列の検索と非常によく似ていると考えるかもしれませんが、言語の実装に関する限り、これらはまったく異なる操作です。また、ほとんどのstrメソッドは、正規表現に適用しても意味がありません。

オブジェクトは (ほとんどのクラス インスタンスと同様に) ブール コンテキストでは「真実」であるため、テストを削除re.matchすることで、少なくともifステートメントを短くすることができます。is not None行の残りの部分は、実際に Python に必要なものを伝えるために必要です。あなたのstr.strip場合 (または文字列操作に似た操作を正規表現で行いたい場合) については、reモジュール内の関数を参照してください。そこには役立つ便利な機能がたくさんあります。re_splitまたは、関数を自分で実装するのはかなり簡単なはずです。

于 2012-05-22T21:41:04.013 に答える