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

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

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

2回答

3201閲覧

正規表現で括弧に挟まれていないパターンのみ取り出す

moch

総合スコア122

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/12/01 14:59

仮にpythonを用いますが、言語は何でも構いません。

python

1line = "0,[1,2],3,4,[5,6,7],[8]"

のような文字列(一つの数字または[数字をコンマで連結したもの]をコンマで連結したもの)があるときに、[]に挟まれていないコンマでsplitして

python

1splitted = ["[1,2]", "3", "4", "[5,6,7]", "[8]"]

としたいです。色々考えて以下のような方法を得ました。
大括弧に挟まれていないコンマのインデックスを取得して、そこで分割しています。

python

1line = "0,[1,2],3,4,[5,6,7],[8]" 2 3import re 4 5commas = [x.span()[0] for x in re.finditer(',', line)] # 全てのコンマのインデックス 6p = re.compile('[[^]]*?]') # 大括弧を検出する 7for x in p.finditer(line): # 大括弧に挟まれたものを除く 8 a, b = x.span() # a<=i<bは大括弧の中である 9 commas = [i for i in commas if not a<=i<b] 10 11 12splitted = [line] 13for i in reversed(commas): # 後ろにあるコンマで、順次lineを分割していく 14 splitted = [splitted[0][:i], splitted[0][i+1:]] + splitted[1:] 15 16# splitted => ['0', '[1,2]', '3', '4', '[5,6,7]', '[8]']

願わくばもっと単純に、「大括弧に挟まれていないコンマ」というような正規表現(が存在するならばそれ)を用いて、

python

1pattern = re.compile("大括弧に挟まれていないコンマ") 2pattern.split(line)

のようにしたいのですが、可能でしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

re.findall(r'[[^]]+]|[^,]+', line)
といった書き方は如何でしょうか。

投稿2018/12/01 15:20

argparse

総合スコア1017

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

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

moch

2018/12/01 15:53

ありがとうございます。何で分割するかではなくて、何を取り出したいかを考えれば良いのですね。頭が硬かったです...。 実はこれを適用したい文字列にもう少し複雑なものがあって、(質問の仕方が悪いせいなのですが)うまくいかない例も出てきます。 例えば line = "0,a:[1,2];b:3,4,c:[5,6,7],[8]" ['0', 'a:[1,2];b:3', '4', 'c:[5,6,7]', '[8]'] のようにしたいのですが、条件を正確に表現した上でまた質問させていただきたいと思います。
guest

0

かっこが1重であるという前提のもと、

python

1re.split(r',(?![^[]*])', line)

という書き方でいけました。否定先読みで、後ろに']'がいきなり([が出現する前に)出現しないことで持って、かっこの外にあると判定しています。

投稿2019/04/21 01:09

moch

総合スコア122

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問