2016-09-27 12 views
1

私は次のようなテキストを持っています。実際、上記は全体のテキストのほんの一部です。使用改行は()

私はまた、institutionというStringを持っています。この場合、施設の価値は「オステオパシー医学と健康科学の大学」です。

上記のPDFファイルでは、大学名が行幅を超えて次の行に折り返されています。

私がしたいことは、pdfFileText.contains(機関)を確認することです。しかし、機関がラインラップされているので、これはうまくいきません。

私は新しいString ins = institution.replaceAll( ""、[\ n \ r] +)を作成しようとしました。 しかし、それは動作しませんでした。私もinstitution.replaceAll( ""、[\\\\ n \\\\ r] +)のようなものまで、さまざまな数のダッシュを試しました。またはバックスラッシュを追加することもできます。しかし、何も動作していないようです。

使用する正しい正規表現は何でしょうか?あるいは、contains()は正規表現を許可しないでしょうか?パターンマッチャーを試してみることをお勧めしますか?空白を置き換えるパターンについては、私はまだ混乱しています。

+0

考え方:すべてのハイフンとスペースを 'text'と' searchPhrase'の '.replaceAll(" [\\ p {Pd} \\ s] + ""、 "") 'に置き換え、' .contains' 。 –

答えて

3

あなたはそれを逆にしています。最初の入力から行末を削除します。

pdfFileText.replaceAll("\\s+", " ").contains(institution) 

あなたはその後、前処理と同様、institutionは常に正規化されることを保証できない場合は、次の

pdfFileText.replaceAll("\\s+", " ") 
      .contains(institution.replaceAll("\\s+", " ")) 

これをテストした後であることが判明した場合入力サイズのために遅すぎる場合は、containsを実装して、一致する間に余分な空白をスキップしてください。その後、

+0

Whoa。それはうまくいくようです。ありがとう。 – Tony

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

注フロントと終わりの*追加。テキストの真中。

+0

'matches()'の代わりに 'find()'を使う場合、 '。*'は必要ありません。 – OrangeDog