使用单个正则表达式从一个字符串中提取少量子字符串

时间:2015-02-21 12:27:41

标签: java regex

作为输入,我得到一个像" 0123456789@site.com"的字符串。所有部件都是可变的。只有规则是前面的数字总是10,然后有" @"。 我需要一个正则表达式,这将允许我提取" 12345" (即位置2到6的数字)和" site.com"子。例如,在上述情况下,结果可能是" 12345site.com"或" 12345:site.com"。 可以用一个正则表达式完成吗? 我们怎样才能跳过第7到第10位和第9位的第一位数字和数字? Java中的示例将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,这个正则表达式将会

\d(\d{5})\d{4}@(.+)

然后使用

matcher.group(1) + matcher.group(2)

连接组。

Java代码:

public static void main(String[] args) {
    String s = "0123456789@site.com";
    String patternString = "\\d(\\d{5})\\d{4}@(.+)";
    Pattern pattern = Pattern.compile(patternString);
    Matcher matcher = pattern.matcher(s);
    if (matcher.matches()) {
        System.out.println(matcher.group(1) + matcher.group(2));
        // shows "12345site.com"
    }
}

答案 1 :(得分:0)

特别针对您的输入模式:

\d{1}(\d{5})\d*@(.*)

2 capturing groups: 
   group 1: (\d{5})
   group 2: (.*)

Input: 0123456789@site.com
Output: 12345
        site.com