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);
    }

六月:

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

抛出未找到匹配异常。

我已经用“正则表达式教练”证明了我的正则表达式,它似乎没有损坏,并且匹配所有测试字符串

在此处输入图像描述

4

2 回答 2

2

别介意所有的复杂性。你只需要一行:

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 回答