字符串模式匹配 - 匹配行中的特定文本

时间:2014-07-08 07:24:24

标签: java regex

我需要匹配一个String并使用Java从中检索数据。

e.g。

字符串line='Id 878-234提供数字878-234的信息

以下是预期结果:

  1. 我想匹配“Id”,需要拉出六位数
  2. ID应位于该行的开头。
  3. 如果ID在行首不可用,则应搜索未由-分隔的六位数字。

    String text='Id 878-234 provide info for 1233444 no';
    String regex='^Id ([0-9]{3}-[0-9]{3})';
    
    Matcher m = Pattern.compile(regex).matcher(text);
    
    if(m.matches()) 
    {
    
                    System.debug(m.group(1));
    }
    
  4. 我正在使用上面的代码,但它不起作用。请不要让我如何解决这个bcz我是正则表达的新手。

3 个答案:

答案 0 :(得分:1)

使用m.find()代替m.matches()

根据Java Doc

  • 匹配将返回true 当且仅当整个区域或String匹配此模式时
  • 尝试尝试查找与模式匹配的输入序列的下一个子序列。

答案 1 :(得分:0)

    String line="Id 878-234 provide info for 1233444 no";
    String[] ints = line.split("[^0-9]+");
    int a1 = Integer.parseInt(ints[1]);
    int a2 = Integer.parseInt(ints[2]);
    int a3 = Integer.parseInt(ints[3]);
    System.out.println(a1);
    System.out.println(a2);
    System.out.println(a3);
    output:
    878
    234
    1233444

答案 2 :(得分:0)

下面的正则表达式会得到由-分隔的6位数字,它就在字符串ID之后,

String s = "Id 878-234 provide info for 1233444 no";
Pattern p = Pattern.compile("^Id\\s*([0-9]{3}-[0-9]{3})");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
} //=> 878-234

IDEONE