Нужно регулярное выражение, чтобы удалить пробелы между несколькими новыми строками символов - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над некоторой строкой rawString, в которой мне нужно удалить \ n из некоторых мест, а некоторые - там, где мне нужно go в следующей строке, если там отображается \ n.Пример ввода: -

** As the coronavirus impact weighs, LMT to advance more\nthan $50 mln to small, medium-sized business partners in its\nsupply chain to protect jobs, support economy \n  \n  *New line should start\n\nregular \n  \n \n  \n text.

Я получаю результат Частично с помощью этого кода

 String str = input.replaceAll("\\n","~").replaceAll("~\\s+",System.lineSeparator()+System.lineSeparator()).replaceAll("~", " ");

Результат прямо сейчас я получаю:

** As the coronavirus impact weighs, LMT to advance more than $50 mln to small, medium-sized business partners in its supply chain to protect jobs, support economy


*New line should startregular 





text.

, но проблема в том, что я получаю более одного раза "\ n "последовательно, что все \ n заменяются на один" \ n ", потому что в это время, когда я получаю" \ n "с пробелом, он переходит на следующую строку, e, g, так что это похоже на" \ n \ n Keyword "в этом case "Keyword" показывает в следующей строке, что это правильно, но создает одну дополнительную строку выше, что проблема. Может кто-нибудь, пожалуйста, помогите в этом.

Ожидается: -

** As the coronavirus impact weighs, LMT to advance more than $50 mln to small, medium-sized business partners in its supply chain to protect jobs, support economy

*New line should startregular 

text.

Шаблон ввода для новой строки

\n \n \n SomeText, \n\n SomeText\n, \n \n\n SomeText

Во всех вышеперечисленных паттернах someText начнется со следующей строки.

Паттерн будет создавать только пространство

\nSomeText, \n\n\nSomeText\n\n, \nSomeText

во всех этих случаях создаст только пространство " ",

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Я предлагаю следующее обновление:

String str = input
    .replaceAll("(\\n\\s+){2,}","~") // find duplicate linefeeds with optional spaces
    .replaceAll("\\n"," ") // replace remaining linefeeds with spaces
    .replaceAll("\\s{3,}", "") // remove redundant spaces
    .replaceAll("\\s{2}", " ") // replace duplicate spaces with one
    .replaceAll("~", System.lineSeparator() + System.lineSeparator() // restore linefeeds
);

Создает следующий текст:

** As the coronavirus impact weighs, LMT to advance more than $50 mln to small, medium-sized business partners in its supply chain to protect jobs, support economy 

*New line should start regular 

text.

Обновление для новых тестовых случаев

String str = input
        .replaceAll("(\\n +\\n| \\n+ )","~") // mark duplicate linefeeds with optional spaces
        .replaceAll("\\n+"," ") // replace remaining linefeeds with spaces
        .replaceAll("(~\\s*)+","~") // remove duplicate linefeed marks with optional spaces
        .replaceAll("\\s{3,}", "") // remove redundant spaces
        .replaceAll("\\s{2}", " ") // replace duplicate spaces
        .replaceAll("~", System.lineSeparator() + System.lineSeparator()) // restore linefeeds
    ;
    System.out.println("[" + str + "]");

Дело 2 : "\ n \ n \ n SomeText1, \ n \ n SomeText2 \ n, \ n \ n \ n SomeText3"

[\n
\n
SomeText1,\n
\n
SomeText2 ,\n
\n
SomeText3]

Дело 3 : "\ nSomeText1, \ n \ n \ nSomeText2 \ n \ n, \ nSomeText3"

[ SomeText1, SomeText2 , SomeText3]
0 голосов
/ 17 апреля 2020

Если я не понял неправильно, вы хотите преобразовать кратные \n и пробелы в один \n, тогда

, пожалуйста, попробуйте s = s.replaceAll("\\n\\s+\\b","\n");

для этого вывод конкретного варианта использования был

As the coronavirus impact weighs, LMT to advance more
than $50 mln to small, medium-sized business partners in its
supply chain to protect jobs, support economy 
New line should start
regular 
text.

В общем

Он преобразует \n\n \n \n, \n \n \n, \n \n\n \n \n эти типы шаблонов в одна новая строка ie. \n

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...