我有以下文字
CHAPTER 1
Introduction
CHAPTER OVERVIEW
我创建并测试了(http://regexr.com/)以下regEx for
(CHAPTER\s{1}\d\n)
但是,当我在Java上使用以下代码时,它失败了
String text = stripper.getText(document);//The text above
Pattern p = Pattern.compile("(CHAPTER\\s{1}\\d\\n)");
Matcher m = p.matcher(text);
if (m.find()) {
//do action
}
m.find()总是返回false。
答案 0 :(得分:3)
您的文档也可能包含DOS换行符\r
。您可以使用以下任一模式:
Pattern p = Pattern.compile("CHAPTER\\s+\\d+\\R");
\R
(需要Java 8)会匹配您的数字之后\r
和\n
的任意组合,或只是使用:
Pattern p = Pattern.compile("CHAPTER\\s+\\d+\\s");
因为\s
也匹配任何空格,包括换行符。
另一种选择是将MULTILINE
标记与锚$
一起使用:
Pattern p = Pattern.compile("(?m)CHAPTER\\s+\\d+$");
答案 1 :(得分:0)
您的问题出在源文本中。我想你忘了新线。因为:
String text = "CHAPTER 1\n" +
"Introduction\n" +
"CHAPTER OVERVIEW";
Pattern p = Pattern.compile("(CHAPTER\\s{1}\\d\\n)");
Matcher m = p.matcher(text);
System.out.println(m.find());
会写 true 。字符串正文从这里复制,Intellij添加新行。尝试调试stripper.getText(document)
中的真实内容。
您可以使用Pattern作为第二个参数进行编译。 (Pattern.MULTILINE)更多信息