2013-10-15 2 views
0

Я следующий текст (строка): System.out.println(text)Как определить регулярное выражение, содержащее escape-символы?

.............. 
BLOOMINGTON, IL 61710 
Page 4 of 5 
8/2/2009file://C:\hjO Fhjes\hShjort_2012w211231_0323212_575.htm 
Location: EAST JEFRYN, NY 
.............. 

Мне нужно, чтобы избавиться от любой подстроки, которая начинается со слова "Page" и заканчивается ".htm"

Я попытался следующие:

 Pattern patternP = Pattern.compile("(?:Page.*?)(\\n+)+htm", Pattern.DOTALL); 
     Matcher matcherP = patternP.matcher(filtered); 
     matcherP.find(); 
     String page = matcherP.group(); 
     text = text.replace(page, ""); 

Но это не фильтрует, я думаю, из-за escape-символы. Как я могу улучшить его?

ответ

1

Ваше регулярное выражение не допускает какой-либо содержимого между \n и htm. Вы можете изменить его на

"(?:Page.*?)(\n+).+htm" 

принимают к сведению, что я только использовал 1 \, чтобы избежать новой строки. Это потому, что \n последовательность Java бежать, вам нужно использовать 2 \ для регулярных выражений управляющих последовательностей, как \\d

* Вы, возможно, потребуется, чтобы убедиться, что ваша реализация регулярных выражений поддерживает новые строки, как только что.

1

Нет, это связано с тем, что ваше регулярное выражение неверно. Попробуйте это регулярное выражение для матча:

Pattern.compile("Page(.+?)\\.htm", Pattern.DOTALL); 

Вы можете просто позвонить String#replaceFirst сделать это в одном вызове:

String repl = filtered.replaceFirst("(?s)Page(.+?)\\.htm", ""); 

(?s) Где действует как Pattern.DOTALL

+0

Благодарим за сообщение. Но это не работает. Кроме того, почему мое регулярное выражение ошибочно? –

+0

Попробуйте отредактировать код сейчас. – anubhava

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