2013-03-13 27 views
0

我想匹配以下模式的子字符串:Java和正则表达式,得到它匹配

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

是有没有找到匹配的异常。

我已经证明了我的正则表达式与“正则表达式教练”,似乎没有损坏,并匹配所有的TestString

enter image description here

+0

我只是喜欢看正则表达式教练因为它是一个Lisp应用程序。 – 2013-03-13 19:31:41

回答

2

没关系所有的复杂性。您只需要一行:

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

如果未找到模式,将生成一个空字符串。

如果是我,我会排队,甚至没有分离方法。

+0

感谢您的解决方案! – MemLeak 2013-03-13 19:56:30

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 
+0

这解决了这个问题,似乎是建立匹配器所需要的。 – MemLeak 2013-03-13 19:39:06

+0

@MemLeak我从来没有用toMatchResult方法说实话。 – assylias 2013-03-13 19:42:56