0

次のパターンに一致させたい:

[0-9]*-[0-9]*-[BL]

そして、この文字列にパターンを適用します。

123-456-L-234

これは

123-456-L.

これが私のコードです:

HelperRegex{
..
final static Pattern KEY = Pattern.compile("\\d*-\\d*-[BL]");

    public static String matchKey(String key) {
        return KEY.matcher(key).toMatchResult().group(0);
    }

JUnit:

@Test
public final void testMatchKey() {
    Assert.assertEquals("453-04430-B", HelperRegex.matchKey("453-04430-B-1"));
}

スローされた一致が見つからない例外はありません。

「正規表現コーチ」で正規表現を証明しましたが、壊れていないようで、すべてのテスト文字列に一致します

ここに画像の説明を入力してください

4

2 に答える 2

2

その複雑さを気にしないでください。必要な行は1つだけです。

String match = input.replaceAll(".*?([0-9]*-[0-9]*-[BL])?.*", "$1");

パターンが見つからない場合、これにより空白の文字列が生成されます。

もしそれが私なら、私はこれをインライン化し、別の方法すら持っていません。

于 2013-03-13T19:47:19.807 に答える
1

取得するグループを作成し()、正規表現が文字列全体と一致することを確認する必要があります(グループ0は文字列全体であるため、必要なのはグループ1です)。

String key = "453-04430-B-1";
Pattern pattern = Pattern.compile("(\\d*-\\d*-[BL]).*");
Matcher m = pattern.matcher(key);
if (m.matches())
    System.out.println(m.group(1)); //prints 453-04430-B
于 2013-03-13T19:33:56.477 に答える