質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4610閲覧

python の正規表現で ”同じ文字がn回以上繰り返さない” の書き方

shinichi0326

総合スコア47

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/02/01 05:54

パスワードなどで任意の同じ文字がn回以上出現したらエラー
というプログラムを正規表現を用いて書きたいのですが
ネットを調べてみてもうまく行きません。
どなたかご教授ください。

import re t=input() if not re.match('%s/(.)\1{3,}/',t): print("valid") else: print("invalid")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/02/01 05:57

「連続してn回以上」または「文字列内にn回以上」のどちらの意味でしょうか?
shinichi0326

2019/02/01 06:02

すいません。「連続してn回以上」です よろしくお願いします
guest

回答1

0

ベストアンサー

  • re.match() だと文字列全体が完全一致するかどうかの判定になるので、文字列の一部がパターンにマッチするかどうかを調べる場合は re.search() を使いましょう。
  • 正規表現は (.)\1{2,} です。{3,} とすると、(.) ですでに一文字マッチしているので、4文字以上連続という意味になってしまいます。

https://jex.im/regulex

イメージ説明

  • 正規表現の \ は Python のエスケープ文字でもあるので、\ とするか、文字列リテラル r文字列 を使いましょう。後者がおすすめです。

python

1import re 2 3def validate(text): 4 return not re.search(r'(.)\1{2,}', text) 5 6assert validate('1122331') == True 7assert validate('aa112323') == True 8assert validate('aaAbbBccC') == True 9assert validate('あかさたな') == True 10assert validate('aaabbcc') == False 11assert validate('あああいい') == False 12assert validate(' いい') == False

投稿2019/02/01 06:06

編集2019/02/01 06:11
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shinichi0326

2019/02/01 06:46

大変丁寧な解説誠にありがとうございました。 pythonはそこそこ書けるのですが正規表現は初心者なので大変助かりました。 また何かありましたらご教授ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問