2017-02-03 2 views
-1

Рассмотрим У меня есть строка, как это:Использование регулярных выражений для разделения с голец избежать между двумя голец

String str = "a,b,c,d," + char1 + "e,f" + char2 + ",g,h,i,j"; 

Как разделить каждую вещь с , избегать все, что между char1 и char2 что не ,.

я могу использовать это регулярное выражение ,(?![^()]*\\)) разделить только если char1 = '(' и char2 = ')' вроде этого:

char char1 = '(', char2 = ')'; 
String str = "a,b,c,d," + char1 + "e,f,g" + char2 + ",h"; 
String s2[] = str.toString().split(",(?![^()]*\\))"); 

Я получаю этот результат:

a 
b 
c 
d 
e,f,g 
h 

Так как обобщать это использовать любой символ в char1 и char2.

спасибо.

+0

Что вы подразумеваете под «любым символом»? Может ли char1 и/или char2 быть ',' (запятая)? – Betlista

+1

Этот вопрос выглядит знакомым ... посмотрите [здесь] (http://stackoverflow.com/questions/42021220/how-to-split-string-abcdefgh) – QBrute

+0

@Betlista nope sorry не может быть ',' я забыл эта часть я отредактирую свой вопрос –

ответ

1

Используйте подход : сопоставьте любую подстроку между определяемыми вами символами, а затем любой символ, не равный ,, и определяемые пользователем символы.

char char1 = '|', char2 = ')'; 
String str = "a,b,c,d," + char1 + "e,f,g" + char2 + ",h"; 
String ch1_quoted = Pattern.quote(Character.toString(char1)); 
String ch2_quoted = Pattern.quote(Character.toString(char2)); 
List<String> s2 = new ArrayList<>(); 
Pattern pattern = Pattern.compile(ch1_quoted + "(.*?)" 
            + ch2_quoted + "|[^," + ch1_quoted + ch2_quoted + "]+", Pattern.DOTALL); 
Matcher matcher = pattern.matcher(str); 
while (matcher.find()){ 
    if (matcher.group(1) != null) { 
     s2.add(matcher.group(1)); 
     System.out.println(matcher.group(1)); 
    } else { 
     s2.add(matcher.group(0)); 
     System.out.println(matcher.group(0)); 
    } 
} 

См. Java demo.

Pattern.DOTALL Используется, чтобы сделать . совпадение символов разрыва строки - на всякий случай.

См. sample code regex demo.

+1

да это прекрасно работает хорошо спасибо –

+0

Извините, можете ли вы улучшить свой шаблон, чтобы удалить два символа в результате, вместо этого вместо '| e, f, g)' результат должен быть без этих двух символов, как так 'E, F, G' –

+0

я думаю, что это моя ошибка в вопросе я поставил' б с d (е, е, ж) h' вместо 'б c d e, f, g h' –

Смежные вопросы