2016-03-09 2 views
0

У меня есть текстовый файл, состоящий из последовательностей. мой текстовый файл выглядетьудаление строки короче длины 2 с использованием регулярного выражения

  • 1,48 15
  • 1 15,32
  • 1 15,32,45
  • 1,45 15,32

Я хочу, чтобы удалить эта строка, состоящая из длины менее 2 перед пространством. например. вторая и третья последовательности состоят только из 1 числа перед пробелом, я хочу отбросить эти строки, но первая и последняя последовательность состоят из 2 чисел, они останутся. желаемый результат будет:

  • 1,48 15
  • 1,45 15,32

Я попытался это выражение

s1.replaceAll("\\b[\\w']{1}\\b", "") 

но мой выходной выглядеть следующим

  • , 48 15
  • 15,32
  • 15,32,45
  • , 45 15,32
+0

Может 's1.replaceAll ("(? m)^\\ d \\ s. * \ r? \ n?", "") 'достаточно? –

+0

Thanks.it работал, но последовательность вроде 712 722 все еще там – lucy

+0

Acc. к вашим требованиям, '712 722' должен остаться. Меня больше интересует, если вы хотите удалить строки с '123 23 1 456' из-за' 1' внутри. Я предлагаю '^ (?: [\\ d,] +)? \\ d (?: [\\ d,] * + (?: \ N | $))' then –

ответ

1

Так как вам нужно удалить линию начиная с одного числа (последовательность цифр) до первого места, вы можете использовать

s1.replaceAll("(?m)^\\d+\\s.*\r?\n?", "") 

или (чтобы убедиться, что мы не совпадают с символом новой строки, заменить \s с [^\S\n]):

s1.replaceAll("(?m)^\\d+[^\\S\n].*\r?\n?", "") 

Смотрите regex demo

Шаблон совпадений:

  • (?m)^ - позволяет многострочный режим, в котором ^ матчи начать линия
  • \\d+ - один или более цифр
  • \\s - пробелами ([^\S\n] матчи любой пробел, но перевод строки)
  • .* - любой символ, но символ новой строки как можно до
  • \r?\n? - один или ноль \r, за которым следует один или нулевой случай \n.

См Java demo:

String s1 = "1,48 15\n1 15,32\n1 15,32,45\n1,45 15,32"; 
System.out.println(s1.replaceAll("(?m)^\\d+\\s.*\r?\n?", "")); 

ПРИМЕЧАНИЕ, что если вы ведущий пробел, который вы хотите игнорировать, используйте

^\s*\d+\s.*\r?\n? 

Смотреть another regex demo

+0

эй. Я не получаю, как удалить пустые строки, оставшиеся после этого. я попытался сделать с добавлением \\ b. но он не работает. вы можете помочь ? – lucy

+0

Не должно быть пустых строк. Не могли бы вы разместить реальную строку, например 'String s =" 783 455 444 \ n34345 656465 "' (используйте символы '' '' внутри комментариев для форматирования «кода») –

+0

'String s =" 1 15,32,45 "' – lucy

0

Вы можете заменить строки, используя следующую закономерность:

String text = 
    "1,48 15" 
     + System.getProperty("line.separator") 
     + "1 15,32" 
     + System.getProperty("line.separator") 
     + "1 15,32,45" 
     + System.getProperty("line.separator") 
     + "1,45 15,32"; 
//         | multi-line pattern flag 
//         | | start of line 
//         | || one character 
//         | || | followed by space 
//         | || | | etc. 
//         | || | |  | replace with empty line 
//         | || | |  | 
System.out.println(text.replaceAll("(?m)^.{1}\\s.*?$", "")); 

Выход

1,48 15 


1,45 15,32 
0

Попробуйте:

System.out.println(text.replaceAll("(?m)\\n^\\d\\s[^\\n]+", "")); 

DEMO

выход:

1,48 15 
1,45 15,32 

он должен также удалить пустые строки.

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