0

我有以下文本(字符串): 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, "");

但这并没有过滤,我认为是因为转义字符。我该如何改进它?

4

2 回答 2

1

不,这是因为您的正则表达式错误。试试这个正则表达式来匹配你的比赛:

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

您只需拨打电话String#replaceFirst即可完成此操作:

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

在哪里(?s)充当Pattern.DOTALL

于 2013-10-15T15:51:40.320 回答
1

您的正则表达式不允许\n和之间的任何内容htm。你可能想把它改成

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

请注意,我只使用 1\来转义换行符。那是因为\n是一个 java 转义序列,你只需要使用 2\作为正则表达式转义序列,比如\\d

*您可能需要确保您的正则表达式实现支持这样的换行符。

于 2013-10-15T15:53:49.697 回答