сделать .replaceFirst () начать после определенного символа

1

Есть ли способ, которым я могу сделать.replaceFirst() начать заменять только а после определенной строки? например, я знаю, что регулярное выражение не очень хорошо работает с html, и у меня есть html-текст, состоящий из 1 h2 главы и одного абзаца. Теперь ключевые слова, которые я заменяю с помощью моего программного обеспечения, работают безупречно, однако иногда ключевые слова также заменяются в заголовке. Есть ли способ сделать JAVA знать, чтобы начать сбор данных после первой

</h2>

Строка?

  • 4
    хорошо .. от макушки головы .. сделайте indexOf() чтобы получить первый h2 а затем возьмите подстроку после этого до конца. Затем замените подстроку, а затем объедините ее с исходной.
Теги:

1 ответ

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

Если вы хотите, чтобы регулярное выражение находилось в решении (так что не имеет значения, если вы используете replaceFirst() или replaceAll()), я могу предложить использовать группы захвата:

(?s)(<\/h2.+)\b(keyword)\b(?=.*<\/h2>.*$)

 String regex = "(?s)(<\\/h2.+)\\b(keyword)\\b(?=.*<\\/h2>.*$)";

Замените "ключевое слово" словом и используйте "$ 1 [replacement_keyword]" в качестве строки замены.

Вот пример кода:

String input = "<title>Replacing keywords with keyword</title>\n"+
               "<body>\n"+
               "<h2>Titles</h2>\n"+
               "<p>Par with keywords and keyword</p>\n"+
               "<h2>Titles</h2>\n"+
               "<p>Par with keywords and keyword</p>\n"+
               "</body>";
String regex = "(?s)(<\\/h2.+)\\b(keyword)\\b(?=.*<\\/h2>.*$)";
String keytoreplacewith = "NEW_COOL_KEYWORD";
String output = input.replaceFirst(regex, "$1"+keytoreplacewith);
System.out.println(output);

Вывод:

<title>Replacing keywords with keyword</title>
<body>
<h2>Titles</h2>
<p>Par with keywords and NEW_COOL_KEYWORD</p>
<h2>Titles</h2>
<p>Par with keywords and keyword</p>
</body>
  • 1
    Это не работает ... замена ключевого слова не выполнена ... (Я называю это так: text.replaceFirst ("(? S) (<\\ / h2. +) \\ b (" + myKeyword + ") \\ b (? =. * <\\ / h2>. * $)", "$ 1 [" + keytoreplacewith + "]");)
  • 0
    Хорошо, я добавил пример кода и ссылку на пример программы.

Ещё вопросы

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