2011-12-14 23 views
0

'[A-Za-z0-9-_]*'Pythonで正規表現で記号を開始と終了

'^[A-Za-z0-9-_]*$'

私はちょうど#%&/()などの確認これ以上変な看板を作りたい、文字列のみが上記式の記号が含まれているかどうかを確認しているしたいです弦の中に

これらの2つの正規表現に違いがあるのでしょうか?始まりと終わりの記号が関係するのか?どういうわけか結果に影響を与えますか?

+0

[]はSの内部で、それは置くのがベストです[-_ A-ZA-Z0-9]「 - 」 [A-Za-z0-9_-]のように[]の末尾にある文字 ' - 'と一致するために使用された場合、それ以外の場合は、実際に '0〜9、 - 、_'であることを確認する前に、フォームを「9〜アンダースコア」として誤読する可能性があります。また、「A-C-_」を「ABC-_」に変更し、最初の変更が忘れると、2番目の解釈方法が変わることもあります。 –

答えて

1

開始記号と終了記号は、文字列の先頭と末尾に一致します。

最初の文字列は、[A-Za-z0-9-_](基本的には任意の文字列)の0回以上の文字列に一致します。

第二は、空の文字列に一致しますが、いないで定義されていない文字が含まれている1

3

Pythonの正規表現は、文字列の先頭に(他の多くの言語のように)固定されています。したがって、冒頭の^記号は何の違いもありません。しかし、$の記号は大変です。あなたがそれを含めなければ、あなたはあなたの文字列の始めに一致するだけで、終わりにはあなたが除外したい文字を含む何かを含むことができます。試してみてくださいre.match("[a-z0-9]", "abcdef/%&")

それに加えて、あなたがテストしている文字を単純に除外する正規表現を使用しても大丈夫です(したがって、[^#%&/()] - または括弧をエスケープするために何かをする必要があります。現時点でどのように動作するかを覚えている)。

+3

Pythonは2つのマッチメソッド 'match'と' search'を提供しています - 検索がアンカーされていないので、正しいものを使用してください。 –

0

はいそうです。正規表現は入力のどこにでもマッチすることができます。 #あなたの最初の正規表現で一致します。

関連する問題