2011-02-09 13 views
1

Pythonでは、文字列がnullか空であるかどうかを確認するにはどうすればよいですか?どのようにこのに対してガードを行い、Pythonでnullsを防ぐ方法

p = re.compile(...) 

a = p.search(..).group(1) 

グループは、インデックス1の何かを持っていない場合、これが壊れる:C#で

我々はString.IsNullOrEmpty(some_string)

また、私のようないくつかの正規表現をやってるのか?つまり、これら2行を安全にどのように書き直すのですか?

答えて

7

はちょうどそれをチェックする場合に使用できると思います。明示的なものは暗黙的なものよりも優れており、もう一つの行はあなたを殺さないでしょう。

a = p.search(...) 
if a is not None: 
    # ... 
+0

Pythonは通常、EAFPからLBYLスタイルを優先します。これは、 'a'が通常は' None'でなければ 'try/except'よりも遅くなります。 –

+1

@Tim Pietzcker:遅い?どのくらい遅いチェックはありませんでした。あなたの最優先事項は、高速かつ間違ったコードではなく、正確で読みやすいコードを書くことです。 –

+0

@Tim:時期尚早の最適化とすべて(そして私はそれが正規表現の実行時と比較して重要ではないと思う)。 'AttributeError'(これはまたタイプミスを隠すかもしれない)をチェックするよりも明確です(' re.search'が 'None'を返すことは文書化された動作ですから)。 –

-2

これは正しくないかもしれないが、私は、p!=なし(または、それがNULL/NULLかもしれません)

+0

( 'p'は' NONE'するつもりはないが、 'p.search "foo") 'かもしれない。 –

+0

また、シングルトン(すなわち、「なし」)には「is」を使用する必要があります。 – delnan

2

reモジュールとの典型的な方法は次のとおりです。

m = p.search(..) 
if m: 
    a = m.group(1) 

または

m = p.search(..) 
a = m.group(1) if m else '' 

残念ながら(もしくは幸い)、Pythonはあなたが1行ですべてを記述することはできません。

+0

グループはインデックス1に何もないことはありませんか? – Blankman

+0

@Blankman: '.group(1)'が何にもマッチしない場合、mはNoneでなければならないか、 'm.group(1)'を呼び出すと空文字列が返されます。あなたがしたい場合空の文字列を確認することができます。 –

1

p.search(..)何も見つからなかった場合は、あなたが行うことができますので、なしを返しません: "nullまたは空" と

a = p.search(..) 
if a is None: 
    # oops 
    print "Nothing found" 
else: 
    print "Hooray!" 
0

私はあなたがNone""を意味するとします。幸いにも、Pythonでは、これらの両方がFalseと評価されます。

あなたのC#は次のようになります場合:

if (! String.IsNullOrEmpty(some_string)) 
    do_something(); 

次に、あなたのPythonは次のようになります。

if not some_string: 
    do_something() 
関連する問題