我的文字如下:
Grad/Med School University of Osteopathic Medicine and Health Sci.这是从pdfFile读取到名为pdfFileText的String(Java)。实际上,上述内容只是整个文本的一小部分。
我还会有一个叫做机构的字符串。在这种情况下,机构的价值是#34;骨科医学和健康科学大学。"
在PDF文件中,如上所示,大学名称超出了行宽,因此它将换行到下一行。
我想要做的是验证pdfFileText.contains(机构)。但是,由于该机构是线路包装,这将无法运作。
我尝试制作一个新的字符串ins = institution.replaceAll("",[\ n \ r] +); 但那没用。我也试过各种破折号,直到像institution.replaceAll("",[\\\\ n \\\\ r] +)这样的东西;或者更多的反斜杠。但似乎没有任何效果。
可以使用正确的正则表达式?或许,contains()不允许正则表达式?你会建议尝试模式匹配器吗?我仍然会对在模式中用空格替换什么感到困惑。
答案 0 :(得分:3)
你正在倒退。首先从输入中删除行结尾:
institution
如果您无法保证pdfFileText.replaceAll("\\s+", " ")
.contains(institution.replaceAll("\\s+", " "))
始终会被标准化,那么也要对其进行预处理:
contains
如果经过测试后由于输入大小而变得太慢,请实现自己的{{1}},只需在匹配时跳过额外的空格。
答案 1 :(得分:2)
首先用空白字符类替换空格,然后检查多行:
查找具有任意空格的多行模式 String text = "Grad/Med School University of Osteopathic Medicine and\nHealth Sci. And more text.";
String pat = "University of Osteopathic Medicine and Health Sci";
Pattern regex = Pattern.compile(".*" + pat.replaceAll("\\s", "\\\\s+") + ".*", Pattern.MULTILINE);
Matcher matcher = regex.matcher(text);
System.out.println(matcher.matches());
注意在前面和末尾添加。*以匹配文本中间的字符串。