2016-11-23 3 views
3

括弧や引用符でカンマを無視し、私はhello, "darkness, my", (old, friend)のような文字列を持っていると私は、この分割さ結果たい:
hello
"darkness, my"
(old, friend)コンマによって分割文字列ではなく

を私はカンマを無視する方法を見つけました。-marks(,?=([^\"]*\"[^\"]*\")*[^\"]*$)と括弧でカンマを無視する別の方法(,(?=[^\\)]*(?:\\(|$)))」の
私が最初に使用する場合は、私が取得:
hello
"darkness, my"
(old
friend)
そして、私は2番目を使用する場合、私が取得:
hello
"darkness
my"
(old, friend)

しかし、どのように私はこの二つのソリューションを組み合わせていますか?

+3

変動などのデータの各部分[**史上最高の正規表現のトリック**](http://www.rexegg.com/regex-bestをキャプチャします-tick.html) - 'Java'セクションまでスクロールします。 – Jan

+1

いつでも両方のテストを使うことができます。 '、(?= ...)(?= ...)'。あるいは、あなたの人生を簡単にするために区切り文字を記述するsplitを使わないようにするには、 'Matcher#find'を使い、'任意の単語 'OR' '引用符間のテキスト' OR '(かっこの間のテキスト)'に興味のあるトークンを記述します。あるいは正規表現を全く使わない方が良いかもしれません。単に文字を繰り返し、かっこや引用符の外にあるコンマに注意を払うだけです。https://stackoverflow.com/questions/12756651/split-a-string-based-on-regex/12756948#12756948 – Pshemo

+0

ありがとうございました。非常に小さなものですので、@Pshemoが示唆したように両方のテストを使用しました。 – Selphiron

答えて

3

パーツを分割するのではなく、パーツを一致させる方が簡単でしょう。

\s*("[^"]*"|\([^)]*\)|[^,]+)

これは、グループの1

+0

ありがとうございました。もう1つの解決策は、@Pshemoが示唆しているように、両方のテスト '、(?= ...)(?= ...)'を使用することでしたが、これもアプローチです。ありがとう – Selphiron

関連する問題