在String.contains()

时间:2016-09-27 12:39:28

标签: java regex

我的文字如下:

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()不允许正则表达式?你会建议尝试模式匹配器吗?我仍然会对在模式中用空格替换什么感到困惑。

2 个答案:

答案 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());

注意在前面和末尾添加。*以匹配文本中间的字符串。