Java 正则表达式不匹配
我有以下文字Java 正则表达式不匹配,java,regex,Java,Regex,我有以下文字 CHAPTER 1 Introduction CHAPTER OVERVIEW 我为它创建并测试了()以下正则表达式 (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
CHAPTER 1
Introduction
CHAPTER OVERVIEW
我为它创建并测试了()以下正则表达式
(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。您的文档也可能有DOS换行
\r
。您可以使用以下任一模式:
Pattern p = Pattern.compile("CHAPTER\\s+\\d+\\R");
\R
(需要Java 8)将在您的数字后匹配\R
和\n
的任意组合,或仅使用:
Pattern p = Pattern.compile("CHAPTER\\s+\\d+\\s");
因为\s
还匹配任何空格,包括换行符
另一种选择是使用带有锚定的多行
标志$
:
Pattern p = Pattern.compile("(?m)CHAPTER\\s+\\d+$");
您的问题在源文本中。我想你忘了新台词了。因为:
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(文档)
中真正得到的内容。
您可以使用模式作为编译的第二个参数。(Pattern.MULTILINE)更多信息
.匹配换行符可能有问题,您是否可以尝试\r\n而不仅仅是\n?因为Java 8,匹配换行符的更好替代方法是。它将匹配
\r\n
(Windows)、一个\r
(旧MacOSs)、一个\n
(Linux)和其他一些具有相同含义的Unicode字符。非常感谢@Aaron,\r
肯定更好(编辑),除非你想匹配空行,我想你可以去掉+
量词,因为\R
将匹配整个\R\n
序列。非常感谢@anubhava为您提供的帮助,经过测试,工作完美。