1

次のいずれかの形式の文字列からパス番号を抽出しようとしています。

PassID_132
PassID_64
Pass_298
Pass_16

このために、次の正規表現を作成しました。

Pass[I]?[D]?_([\d]{2,3})

-Eclipseの検索ダイアログでテストしました。うまくいきました。

しかし、コードで使用すると、何にも一致しません。ここに私のコードスニペットがあります:

String idString = filename.replaceAll("Pass[I]?[D]?_([\\d]{2,3})", "$1");
int result = Integer.parseInt(idString);

私も試しました

java.util.regex.Pattern.compile("Pass[I]?[D]?_([\\d]{2,3})")

デバッグ中にウィンドウに表示されますが、それは「」と表示されますが、

java.util.regex.Pattern.compile("Pass[I]?[D]?_([0-9]{2,3})")

コンパイルされましたが、何も一致しませんでした。何が問題なのですか?

4

2 に答える 2

2

Pass[I]?[D]?_([\d]{2,3}) の代わりにこれを試してください:

Pass(?:I)?(?:D)?_([\d]{2,3})
于 2013-07-25T11:34:52.730 に答える
1

あなたのtegexに無効なものは何もありませんが、それはひどいです。1 文字の用語に文字クラスは必要ありません。これを試して:

"Pass(?:ID)?_(\\d{2,3})"
于 2013-07-25T11:49:21.137 に答える