文字列に大文字と小文字、数字、およびアンダースコアのみが含まれているかどうかを確認する正規表現が必要ですが、アンダースコアは、Python で以下を試している文字列の最初または最後の文字であってはなりません。
"^[a-zA-Z0-9_]*$"
文字列に大文字と小文字、数字、およびアンダースコアのみが含まれているかどうかを確認する正規表現が必要ですが、アンダースコアは、Python で以下を試している文字列の最初または最後の文字であってはなりません。
"^[a-zA-Z0-9_]*$"
次の正規表現を使用できます。
^(?!_)\w*(?<!_)$
\w
と同等です[A-Za-z0-9_]
(?!)
最初の文字が ではないことを確認するために負の先読みを使用し、最後の文字が ではないことを確認するために_
負の後読みを使用します。(?<!)
_
基準でオプションの終了を指定します。
'^([a-zA-Z0-9]([a-zA-Z0-9_]*[a-zA-Z0-9])?)?$'
元の試みのように、外側の括弧は空の文字列を許可することです。空の文字列に一致させたくない場合は、最初の括弧を削除し、疑問符量指定子を使用して閉じ括弧を削除することで単純化できます。
また、簡単にするためにキャプチャ用の括弧を使用していることにも注意してください。左括弧を非キャプチャに変換すると、(?:
おそらく少し速くなりますが、この単純なケースではほとんど問題になりません。
@JoelCornett で提案されてre.match
いるように、文字列の場合は開始時にのみ明示的に検索し、^
アンカーをドロップするために使用できます。