旧タイトル:Python3の正規表現における,エスケープした大括弧の認識について
問題解決により改題を行いました


Python3系の正規表現により,文章中に含まれる[1]や[2,3,10,...,n]のような,大括弧で囲まれた数字とカンマの一覧の取得を行いたいです.

正規表現は以下のように記述しましたが,マッチした箇所の取得がうまくいきませんでした.

t_str = "44hogehoge[23][34][1,2,45][6,][]"
ptnA = re.compile(r'\[{1}([0-9]{1,2}\,?\s*)+\]{1}', flags=re.MULTILINE)
print(re.findall(ptnA,t_str))
print(re.search(ptnA,t_str).group())

>>>['23', '34', '45', '6,']
>>>[23]

このように,findallを用いた後に,始端終端で用意している[ ]が認識されません.
また,連続して数字とカンマが出現する場合に,それら全てを取得することができていません.

patternをいくつか変更して試してみた結果を以下に示します.

t_str = "44hogehoge[23][34][1,2,45][6,][]"
ptnB = re.compile(r'\[([0-9]{0,2}\,?\s*)?\]', flags=re.MULTILINE)
ptnC = re.compile(r'\[[0-9]{0,2}', flags=re.MULTILINE)
print(re.findall(ptnB,t_str))
print(re.findall(ptnC,t_str))
print(re.search(ptnB,t_str).group())
print(re.search(ptnC,t_str).group())

>>>['23', '34', '6,', '']
>>>['[23', '[34', '[1', '[6', '[']
>>>[23]
>>>[23

# n, の組が3連続の場合のみ合致
ptnA2 = re.compile(r'\[{1}([0-9]{1,2}\,?\s*){3}\]{1}', flags=re.MULTILINE)
print(re.findall(ptnA2,t_str))
print(re.search(ptnA2,t_str).group())

>>>['45']
>>>[1,2,45]

https://regex101.com/ を用いてptnAについて試したところ,意図していた通りの動作を確認できました.

Python3.5.2を使用しています.

ご教示よろしくお願いします.