0

Javaで非常に特定の一連の文字を「検索」しようとしていますが、正規表現が正しく機能していません。

単語(任意の単語)、スペース、フォワードスラッシュ、別のスペース、「M」(小文字または大文字)、一連の数字の順に検索します。私は次の行を使用しています:

Elements rating = doc.getElementsMatchingText(Pattern.compile("\\b\\s/\\s[mM][0-9]+")); 

しかし、これは行全体(意図されたパターンの前後の単語)を見つけることです。これも役に立ちません:

Elements rating = doc.getElementsMatchingText(Pattern.compile("^\\b\\s/\\s[mM][0-9]+"));    

私は何が間違っているのですか?

4

3 に答える 3

2

あなたの場合の正しいパターンは\\b\\w+\\s/\\s[mM][0-9]+.

ただし、説明した問題は、パターンではなく、使用する API に関連しています。getElementsMatchingTextでは一致の詳細にアクセスできないため、パターンに一致したテキストの一部を抽出できないことに注意してください。

docのすべての要素を手動で繰り返し処理しMatcher.find()、各要素のテキストに適用するか、Matcher.find()によって返される要素のテキストに同じパターンを再度適用する必要がありますgetElementsMatchingText。次に、一致した部分を として抽出できますMatcher.group()

于 2012-04-10T16:13:30.933 に答える
0

あなたの正規表現には欠陥があります。私は提案します

\w+ / [Mm]\d+

(Java 文字列を入力するときは、適切にエスケープすることを忘れないでください)

正規表現に関するいくつかのこと:

1) 現在、「単語 (任意の単語)」に一致するものはありません (!!!) \w+ を選択して、少なくとも 1 つの単語文字のみを含む単語に一致させました。たとえば、さらにカスタマイズしたい場合は、 \w{2,10} のようなことを実行して、2 ~ 10 文字の単語を実行できます。

2) \w* 一致は有効な単語文字のみに一致するため、\b はまったく必要ありません。

3) \s はスペース以外にも一致する可能性があることに注意してください。私はスペースのみを使用しますが、タブ、改行 (そのように構成されている場合) などに一致する場合は \s を入れることができます。

4) \d は [0-9] より慣用的で読みやすいと思います

于 2012-04-10T16:15:05.653 に答える
-1

正規表現については、次を試してください。

.* \ [Mm][1-9]*

http://rubular.com/を使用して正規表現をテストしたので、実験を行うことができます。

さよなら

于 2012-04-10T16:12:39.350 に答える