LoginSignup
3
2

More than 5 years have passed since last update.

Pythonで競プロに挑む日誌 vol.27 ~正規表現~

Posted at

現在の目標

  • 2018年度内に緑色を取得する
    • ABC の A, B 問題を全部解く
    • ABC の C 問題を全部解く
    • AGC の A 問題を全部解く
  • (水色になったら, APG4b で C++ にも手を出す)

解いた問題

ABC-B : Postal Code

結論

正規表現で繰り返し回数を指定するときに, 変数を単純に使うことはできない. また, 正規表現を使いこなすにはもっと文字列操作の勉強が必要そう.

考え方

「(A 個の数字)(-)(B 個の数字)」というフォーマットになっているか確認すればよい, というシンプルな考え方です.

answer.py
# coding: utf-8
import re
A, B = map(int, input().split())
S = input()

p_regex = re.compile("\d"*A + "-" + "\d"*B)
mo = p_regex.search(S)

if mo:
    print("Yes")
else:
    print("No")

「r"\d{A}" + "-" + "\d{B}"」と書きたかったのですが, それでは繰り返し処理できないみたいです. そのため, * で繰り返すことにしました.

ほかの方の気になる回答がコチラ

another.py
# coding: utf-8
import re
A, B = map(int, input().split())
S = input()

pattern = r"\d{{{}}}-\d{{{}}}".format(A, B)
mo = re.search(pattern, S)

if mo:
    print("Yes")
else:
    print("No")

考え方は同じだと思うのですが, 「"\d{{{}}}-\d{{{}}}"」の意味がよくわからない...一番内側の {} は format の変数を指定するためのもので, 一番外側が繰り返しのための {} とすると, 真ん中の {} はナニモノ?

むすび

文字列操作をもっと勉強しよう.

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2