Pythonチャレンジに取り組んでいるときに、この問題に遭遇しました。正確には10番です。私は正規表現を使用してそれを解決しようと決心しました-繰り返しシーケンスを引き出し、それらの長さを数え、それからシーケンス内の次のアイテムを構築します。
したがって、私が開発した正規表現は次のとおりです。'(\d)\1*'
オンラインの正規表現テスターではうまく機能しましたが、スクリプトで使用すると同じようには機能しませんでした。
regex = re.compile('(\d)\1*')
text = '111122223333'
re.findall(regex, text)
> ['1', '1', '1', '1', '2', '2', '2',...]
などなど。そこで、Pythonのreモジュールでraw型について学びます。私の最初の質問はどれですか:誰かがこれが正確に何をするのか説明できますか?ドキュメントでは、バックスラッシュをエスケープする必要性を減らすと説明していますが、などのより単純な正規表現に必要なようには見えず、その\d+
理由がわかりません。
そこで、正規表現をに変更し、シーケンスのリストを作成するためにr'(\d)\1*'
使用してみます。findall()
そして、私は得る
> ['1', '2', '3']
再び非常に混乱しました。私はまだこれを理解していません。助けてください?
私はこれを回避するためにこれを行うことにしました:
[m.group() for m in regex.finditer(text)]
> ['1111', '2222', '3333']
そして、私が探していたものを手に入れましょう。次に、このスレッドに基づいてfindall()
、正規表現全体にグループを追加してみます-> r'((\d)\2*)'
。私は最終的に:
> [('1111', '1'), ('2222', '2'), ('3333', '3')]
この時点で、私はあらゆる種類の混乱を招いています。この結果が複数のグループと関係があることは知っていますが、よくわかりません。
また、初めての投稿ですので、マナーがおかしいとお詫び申し上げます。それについてもお気軽に訂正してください。ありがとう!