■概要
括弧が正しい形で閉じているかチェックする。
対象の括弧およびチェック仕様については以下の通り。
対象
- 括弧の種類は [ ]・{ }・( ) の3種類
チェック対象
- 閉じ括弧 ]・}・)で終わらないものはNG
例:{aaa - 括弧の一部が入れ子になっているものはNG
例:(a[bc)] - 余分な閉じ括弧で終わるものはNG
例:{aaa}]
ログ出力内容
- コンソール出力にする。
- 出力形式は、「日付|ログレベル|モジュール名|ファンクション名|メッセージ」とする。
- ログレベルはINFOとし、チェックNGの場合はERRORとする。
■フローチャート
■サンプルコード
import logging
# 日付:|ログレベル|:|モジュール名|:|ファンクション名|:メッセージ
LOG_FORMATER = '%(asctime)s|%(levelname)s|%(module)s|%(funcName)s|%(message)s'
# ログレベル
logging.basicConfig(level=logging.INFO, format=LOG_FORMATER)
# 括弧判定処理
def check_bracket_format(chars):
# チェック対象括弧のセット(key:value = 開き括弧:閉じ括弧)
bracket_dict = {'{': '}', '[': ']', '(': ')'}
# 閉じ括弧を格納するリスト
stack_bracket_list = []
# 文字列分繰り返し(1文字ずつ取得)
for char in chars:
# 開き括弧判定
if char in bracket_dict.keys():
# 閉じ括弧をリストに格納
stack_bracket_list.append(bracket_dict[char])
# 閉じ括弧判定
if char in bracket_dict.values():
# 閉じ括弧リストが空の場合
if not stack_bracket_list:
logging.error('「' + char + '」に対応する閉じ括弧がリストに格納されていません')
return False
# 対象の閉じ括弧が閉じ括弧リストの末端ではない場合
if char != stack_bracket_list[-1]:
logging.error('閉じ括弧の順序が不正です')
logging.error('期待値:' + char + '| 実測値:' + stack_bracket_list[-1])
return False
else:
# 閉じ括弧リストの末端を取り出す
stack_bracket_list.pop()
# 閉じ括弧リストに括弧が残っている場合
if stack_bracket_list:
logging.error('閉じ括弧がリストに残っています')
logging.error('残っている閉じ括弧:' + str(stack_bracket_list))
return False
logging.info('チェック問題なし')
return True
# メイン処理
if __name__ == '__main__':
data = ''{ss[dd]ff(sd)}''
check_bracket_format(data)
■実行結果
▼正常系
対象文字列:'{ss[dd]ff(sd)}’
2024-05-05 10:11:23,556|INFO|bracket_format|check_bracket_format|チェック問題なし
▼異常系:閉じ括弧リストなし
対象文字列:’){ss[dd]ff(sd)}’
2024-05-05 10:11:23,555|ERROR|bracket_format|check_bracket_format|「)」に対応する閉じ括弧がリストに格納されていません
▼異常系:閉じ括弧順序不正
対象文字列:'{ss[dd]ff(sd)}{[(])’
2024-05-05 10:11:23,556|ERROR|bracket_format|check_bracket_format|閉じ括弧の順序が不正です
2024-05-05 10:11:23,556|ERROR|bracket_format|check_bracket_format|期待値:]| 実測値:)
▼異常系:閉じ括弧残あり
対象文字列:'{ss[dd]ff(sd)}(‘
2024-05-05 10:11:23,556|ERROR|bracket_format|check_bracket_format|閉じ括弧がリストに残っています
2024-05-05 10:11:23,556|ERROR|bracket_format|check_bracket_format|残っている閉じ括弧:[')']
コメント