0

* C:\ Temp \myfile_124.txt*の形式のファイルがあります

アンダースコアの後と拡張子の前にある数字「 124 」だけを与える正規表現が必要です。

私はいくつかの方法を試しましたが、最新のものは

(.+[0-9]{18,})(_[0-9]+)?\\.txt$

目的の出力が得られません。誰かが私に何が悪いのか教えてもらえますか?

       Matcher matcher = FILE_NAME_PATTERN.matcher(filename);
        if (matcher.matches() && matcher.groupCount() == 2) {
            try {
                String index = matcher.group(2);
                if (index != null) {
                    return Integer.parseInt(index.substring(1));
                }
            }
            catch (NumberFormatException e) {

            }   
4

5 に答える 5

2

最初の部分[0-9]{18,}はあなたが持っていない少なくとも18桁を持っていると述べています。

通常、正規表現では、式をできるだけ単純にすることをお勧めします。試してみることをお勧めします

_([0-9]+)?\\.txt$

注:ルックアップを実行するには、find()を呼び出す必要があります。そうしないと、「一致するものが見つかりません」と表示されます。


この例

String s = "C:\\Temp\\myfile_124.txt";
Pattern p = Pattern.compile("_(\\d+)\\.txt$");
Matcher matcher = p.matcher(s);
if (matcher.find())
    for (int i = 0; i <= matcher.groupCount(); i++)
        System.out.println(i + ": " + matcher.group(i));

プリント

0: _124.txt
1: 124
于 2012-11-14T09:37:33.470 に答える
0

これはあなた(?:.*_)(\d+)\.txt のために働くかもしれません:結果はマッチグループにあります。これはポジティブルックアヘッドを使用し、数とのみ一致します。\d+(?=\.txt)

于 2012-11-14T09:38:05.520 に答える
0
.*_([1-9]+)\.[a-zA-Z0-9]+

グループ1には、目的の出力が含まれます。

デモ

于 2012-11-14T09:38:19.043 に答える
0

あなたはこれを行うことができます

^.*_\([^\.]*\)\..*$
于 2012-11-14T09:41:25.420 に答える
0
.*_([0-9]+)\.txt

これも機能するはずです。もちろん、Javaの場合はダブルエスケープする必要があります。

于 2012-11-14T09:41:43.573 に答える