Регулярное выражение для удаления части строки, если ей предшествует какое-либо слово в Java
Есть файл пакета языка свойств:
label.username=Username:
label.tooltip_html=Please enter your username.</center></html>
label.password=Password:
label.tooltip_html=Please enter your password.</center></html>
Как сопоставить все строки, которые имеют как "_html", так и "
"в этом порядке и заменить их той же строкой, кроме окончания"
5 ответов:
Поскольку вы уточнили, что это регулярное выражение должно использоваться в IDE, я протестировал его в Eclipse, и он работает:
FIND: (_html.*)</center></html> REPLACE WITH: $1
Убедитесь, что вы включили переключатель регулярных выражений в диалоговом окне Поиск/замена. Это будет соответствовать любой строке, содержащей
_html.*
(где.*
жадно соответствует любой строке, не содержащей новых строк), а затем</center></html>
. Он использует(…)
скобки для захвата что было сопоставлено с группой 1, и$1
в замена заменителей в какой группе 1 захвачена.Это эффективно удаляет
</center></html>
, Если этой строке предшествует_html
в этой строке.Если в строке может быть несколько
</center></html>
, и все они должны быть удалены, если слева от них есть_html_
, то регулярное выражение будет более сложным, но это можно сделать в одном регулярном выражении с помощью\G
продолжение якоря если это абсолютно необходимо.
Вариации
Говоря более обобщенно, вы также можете сопоставьте такие вещи:
(delete)this part only(please)
Теперь это создает 2 группы захвата. Вы можете сопоставить строки с этим шаблоном и заменить на
$1$2
, и он будет эффективно удалятьthis part only
, но только если ему предшествуетdelete
и за ним следуетplease
. Конечно, эти подшаблоны могут быть более сложными.
if (line.contains("_html=")) { line = line.replace("</center></html>", ""); }
Здесь не требуется регулярное выражение;) (edit ) до тех пор, пока все строки файла свойствхорошо сформированы .
String s = "label.tooltip_html=Please enter your password.</center></html>"; Pattern p = Pattern.compile("(_html.*)</center></html>"); Matcher m = p.matcher(s); System.out.println(m.replaceAll("$1"));