2009-11-23 40 views
8

mpegで始まらない文字列に一致する正規表現を見つけようとしています。これの一般化は、与えられた正規表現で始まらない文字列にマッチすることです。次のように正規表現以外のすべてに一致する正規表現

私のようなものを試してみました:

[^m][^p][^e][^g].* 

をこれに伴う問題は、それが文字列に存在するように、少なくとも4つの文字を必要とすることです。私はこれを扱う良い方法と汎用的な方法でこれを扱う一般的な方法を理解することができませんでした。

私はこれをPythonで使用します。あなたが否定クラスを使用したい場合、またはのみ

(?!mpeg)^.* 

^(.{0,3}$|[^m]|m([^p]|p([^e]|e([^g])))).*$ 
+2

あなたがしたくないすべてのものと一致し、あなたが望むすべてのものと一致しない正規表現を使用している場合なぜ、単に「not」を使用しないのですか? –

+3

なぜこのコミュニティはウィキですか? –

+0

ああ私はコミュニティのwikiの目的を理解しているとは思わない。だから私は誤ってチェックボックスを選択した。 –

答えて

22
^(?!mpeg).* 

これは始まりに過ぎないが、「doesnの文字列に一致する負の先読みを使用しています

+0

+1は質問に答えるために、そして(おそらく)より良い選択肢を提供するために+1します。 –

+0

正規表現は、Webインタフェースを介してユーザによって入力されています。だから、私はPythonプログラムで正規表現を書いていません。正規表現は、私のソフトウェアがファイルを取得するウォッチフォルダのフィルタ設定の一種です。ユーザーは、ユーザーインターフェイスを使用して正規表現を入力します。私のPythonコードはこの正規表現をフィルタリング基準として取り、時計フォルダから適切なファイルを取り出します。 答えが気に入っています。 –

+0

または 'not inputstring.startswith( 'mpeg')' – Paul

2

look-ahead assertion試してみてくださいt一致mpeg。本質的には、 "文字列の先頭の位置は、正規表現mpegとマッチすることができたら、正常にマッチングできる位置にはなり得ません" - つまりmpegで始まらず、 。

しかし、私はあなたが、これは使用していたコンテキストに関する好奇心だろう - ...などのいずれか、より効率的またはより読みやすいでしょうさておき、他のオプションの正規表現から、あるかもしれません

if not inputstring.startswith("mpeg"): 
+0

"negated class"正規表現は機能しません。構文を確認してください。 –

+0

@ J-16 SDiZ:なぜそれを考えるのですか? – Gumbo

+0

おそらく、彼はあなたが文字列の開始前にmpegを「不一致」しようとしていると考えているからでしょう。 ^は幅がゼロのアンカーなので完全に合法ですが、混乱するように見えますが、正しいです。 –

8

正規表現であなたの心を失うことはありません。

if len(mystring) >=4 and mystring[:4]=="mpeg": 
    print "do something" 

またはSTARTSWITHを使用する() "ではない" キーワード

if len(mystring)>=4 and not mystring.startswith("mpeg") 
+5

実際には 'len()'チェックが必要ないことに注意してください。文字列の境界を超えて文字列をスライスすることができます。 – Amber

+0

はい、私はそれを知っています。ちょうど私がOPの要求を間違っているかもしれない。彼は "文字列には少なくとも4文字が必要です"と言った。キーワードは "in the string"です。それは長い文字列かもしれませんし、彼はその要件を持っているかもしれません。とにかく、それはすぐにそれを得るために今OPまで。 – ghostdog74

+0

私はビットが4文字未満であっても、正規表現での彼の元の試みが文字列中に4文字を必要としていたと言いました。 – Amber

0

あなたの正規表現は、 "NPEG" とは一致しないだろうと、私はあなたが非常に恐ろしいである、 ^($|[^m]|m($|[^p]|p($|[^e]|e($|[^g]))))を考え出す必要があるだろうと思います。 もう1つの選択肢は^(.{0,3}$|[^m]|.[^p]|..[^e]|...[^g]) ですが、これはほんのわずかです。ダヴとガンボ:-)によって示唆されているように

は、だから私はあなたが本当に先読みアサーションを使用すべきだと思う

+0

あなたの選択は正しいものではないため、選択肢ではありません。 * npeg *と一致しません。 – Gumbo

+0

試しましたか? [^ p] | .. [^ e] | ... [^ g]) "、" npeg ")はaを返します。オブジェクトに一致します。それは[^ m]が通過するために機能します。 –

関連する問題