有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

作为输入,我得到一个字符串,比如“0123456789@site.com“。所有部分都是可变的。唯一的规则是前面的位数总是10,然后有“@”。 我需要一个正则表达式,它允许我提取“12345”(即从位置2到6的数字)和“site.com”子字符串。例如,在上述情况下,结果可能是“12345site.com”或“12345:site.com”。 可以用一个正则表达式来实现吗? 我们如何跳过第一个数字,以及从第7位到第10位和“@”的数字? 如有Java示例,将不胜感激


共 (2) 个答案

  1. # 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"
        }
    }
    
  2. # 2 楼答案

    专门针对您的输入模式:

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

    2 capturing groups: 
       group 1: (\d{5})
       group 2: (.*)
    
    Input: 0123456789@site.com
    Output: 12345
            site.com