[英]Java and Regex, get a substring which matches
我要匹配以下模式:
[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"));
}
没有找到匹配项引发异常。
我已经用“ regex教练”证明了我的正则表达式,它似乎没有损坏,并且匹配了所有测试字符串
没关系,所有的复杂性。 您只需要一行:
String match = input.replaceAll(".*?([0-9]*-[0-9]*-[BL])?.*", "$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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.