我有以下文字(字符串):
System.out.println(text)
..............
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, "");
但这不会过滤,我认为是因为转义字符。我该如何改进呢?
答案 0 :(得分:1)
不,这是因为你的正则表达式错了。试试这个正则表达式:
Pattern.compile("Page(.+?)\\.htm", Pattern.DOTALL);
您只需拨打String#replaceFirst
即可在一次通话中执行此操作:
String repl = filtered.replaceFirst("(?s)Page(.+?)\\.htm", "");
(?s)
充当Pattern.DOTALL
答案 1 :(得分:1)
您的正则表达式不允许\n
和htm
之间的任何内容。你可能想把它改成
"(?:Page.*?)(\n+).+htm"
注意我只使用1 \
来逃避换行符。那是因为\n
是一个java转义序列,你只需要使用2 \
作为\\d
*您可能需要确保您的正则表达式实现支持这样的换行符。