Как заменить один алфавит тем же алфавитом и символом новой строки в регулярном выражении Java

1

Привет, я хочу заменить строку, например

<foo/><boo/><woo/>

таким образом, чтобы это стало -

<foo/> <boo/> <woo/>

Если я найду <[Az] и заменим на \n< то первый символ исчезнет. Как это сохранить?

PS Сейчас я пытаюсь играть в Notepad++, но, наконец, он перейдет в Java-код.

  • 1
    Предупреждение: не используйте [Az] в своих регулярных выражениях. Чтобы сопоставить любую прописную или строчную букву ASCII, используйте [A-Za-z] или установите флаг игнорирования регистра и используйте [AZ] или [az] . [Az] также может соответствовать нескольким знакам препинания, чьи кодовые точки лежат между Z и a .
Теги:
pattern-matching

2 ответа

1
Лучший ответ

Вы можете попробовать ниже,

(?<=>)(?=<)

используйте указанное выше выражение и затем замените согласованную границу символом \n.

DEMO

String s = "<foo/><boo/><woo/>";
System.out.println(s.replaceAll("(?<=>)(?=<)", "\n"));

Вывод:

<foo/>
<boo/>
<woo/>

ИЛИ

String s = "<foo/><boo/><woo/>";
System.out.println(s.replaceAll("(?!^)(<[A-Za-z])", "\n$1"));

Это регулярное выражение будет работать и на notepad++.

2

Просто захватите то, что вы хотите.

(<[^>]*>)

Замените на $1\n См. Демо.

https://www.regex101.com/r/rK5lU1/14

РЕДАКТИРОВАТЬ:

Если вам не нужна дополнительная строка в конце, попробуйте

(<[^>]*>)(?!$)

Замените на $1\n См. Демо.

https://www.regex101.com/r/rK5lU1/15

  • 0
    но он создает дополнительный символ новой строки в конце.
  • 2
    @AvinashRaj дополнительный перевод строки в конце не делает это неправильным ответом. Это не экзамен IPS, мы здесь, чтобы помочь. А понижение голосов без комментариев - худшая вещь ИМХО

Ещё вопросы

Сообщество Overcoder
Наверх
Меню