java字符串的正则表达式匹配“number(number)。”

时间:2017-07-18 11:29:23

标签: java regex string arraylist

我所说的是,我正在尝试根据正则表达式制作一个过滤掉字符串数组的方法,但我无法做到这一点。 例如我有一个数组

String[] items = ["6652(1).png", "7876(2).png", "7890-(1).jpg", "6543(1).JPG", "12249(3)-.PNG"]

public ArrayList<String> filterByRegularExpress(String[] items) {
    ArrayList<String> filteredStrings = new ArrayList<String>();
    for(String item: items) {
        if(item.contains("regularexpression")){ // it is in here, i need to do some regular express for number(number).
            filteredStrings.add(item);
        }
    }
    System.out.print(filteredStrings);
}

所以结果只有"6652(1).png" , "7876(2).png" , "6543(1).JPG"

我该如何编写这样的正则表达式? 感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

尝试使用方法正文:

ArrayList<String> filteredStrings = new ArrayList<String>();
Pattern pat = Pattern.compile("\\A\\d+\\(\\d+\\)\\..+\\z");
for(String item: items) {
    Matcher matcher = pat.matcher(item);
    if(matcher.matches()){ // it is in here, i need to do some regular express for number(number).
        filteredStrings.add(item);
    }
}
System.out.print(filteredStrings);

这将根据输入的开头(\\A)匹配一个字符串,后跟任意数量的数字(至少有一个,\\d+),后跟一个文字左括号被转义,因为它在正则表达式(\\()中有特殊含义,然后括号之间的任意位数(如果在您的方案中只能是一位数,只需删除+),然后关闭括号,再次像开头一样逃脱,然后是文字。,由于其特殊含义而逃脱。在正则表达式(\\.)中,我们使用。的特殊含义,这意味着&#34;任何字符&#34;,我们说这里可以有任意数量的任何字符(.+ ),然后是字符串的结尾(\\z)。总而言之,这是一种更易于阅读的方式,它匹配number(number).anything。在您的示例中,我测试了它并获得了正确的输出[6652(1).png, 7876(2).png, 6543(1).JPG]

答案 1 :(得分:0)

你可以用模式

来做
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("There are more than -2 and less than 12 numbers here");
while (m.find()) {
  System.out.println(m.group());
}

根据Java正则表达式,+表示&#34;一次或多次&#34;和\ d表示&#34;数字&#34;。

注意:&#34;双反斜杠&#34;是一个获取单个反斜杠的转义序列 - 因此,java字符串中的\ d为您提供实际结果:\ d