2016-10-24 15 views
-2

私はRegExを使用して薬物名を見つけるために私が使用するプライベートメソッドを持っています。コードは次のとおりです。JavaでRegExを大文字と小文字を区別しない方法は?

private boolean containsExactDrugName(String testString, String drugName) { 

    int begin = -1; 
    int end = -1; 

    Matcher m = Pattern.compile("\\b(?:" + drugName + ")\\b|\\S+", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE).matcher(testString); 
    ArrayList<String> results = new ArrayList<>(); 

    while (m.find()) { 
     results.add(m.group()); 
    } 

    boolean found = results.contains(drugName); 
    return found; 
} 

これは、ドラッグネームを取る必要があり、テキスト文字列内で正確に一致するものを見つける必要があります。つまり、薬剤名がinsulineで、文字列のテキストがThe patient is taking insulineee for the treatment of diabetesの場合、それは中断されます。 The patient is taking insuline for the treatment of diabetesの完全一致が必要です。

ただし、大文字と小文字を区別しない一致が必要です。テキストがThe patient is taking Insuline for the treatment of diabetesまたはThe patient is taking INSULINE for the treatment of diabetesの場合は、trueも返されます。

Pattern.CASE_INSENSITIVEをコードの中に入れましたが、機能しません。それを正しく書くには?

Pattern.CASE_INSENSITIVE @Chaklader

+1

をマッチングするためのマッチングのために、私は理解していない 。 [ここ](https://ideone.com/9kZJNu)を見て、結果は期待されていますか? –

+0

'| \\ S +'は非常に疑わしく見えます。それは、 "またはスペースのない文字のシーケンスと一致する"と言います。 – khelwood

+0

'insulineee'がテキストの中にある場合、戻り値の型は' false'である必要があります – Chaklader

答えて

3

は、私が知らてる方法です。それは動作するはずです。あなたは `\のS +`必要とする理由のみ大文字と小文字を区別しないASCIIが

Pattern p = Pattern.compile("YOUR_REGEX GOES HERE", Pattern.CASE_INSENSITIVE); 

またはUnicodeケースフォールディング

Pattern p = Pattern.compile("YOUR_REGEX GOES HERE", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); 
+0

を参照して、非ASCII文字を使用しているかどうかを確認してください。 –

+0

これは私が使用しているのと同じですが、まだ動作していません。私はいくつかのテストをした後に報告します。 – Chaklader

+0

サンプルプログラムで所定のメソッドのテストを行い、結果を確認します。 OKなら、あなたの実際のプログラムで問題を見つけてください。 –

関連する問題